Assuming you name your table as tblData, the following will work:
SELECT DISTINCT D.[id],
(SELECT TOP 1 name FROM tblData WHERE [id] = D.[id] AND name IS NOT NULL) AS name,
(SELECT TOP 1 address FROM tblData WHERE [id] = D.[id] AND address IS NOT NULL) AS address
FROM tblData D
ORDER BY D.[id]
"first non-nul value of name and address group by id"???
There is no "first" value for an ID unless you specify additional sort orders that define a unique composite key. If you just want the first value alphabetically, RogerWilco's simple solution will work fine. If you have in mind some different sort logic, or you are relying upon the order in which the data is stored in the table, then you need to rethink your design.
If it's not practically useful, then it's practically useless.