Reputation: 97
I have a scenario in which i generate a temp table in that table i have to remove the repeating values like....
id Ref_No css_no haz_no Emp_no X-Fac Y-Fac Location street_name Locale town_name admin_area
341139 317000334 NULL NULL 37101195 588550.00 185922.00 SUTTON ROAD SOUTHEND-ON-SEA SOUTHEND-ON-SEA
477641 317000334 NULL NULL 37100003 582297.00 582297.00 ttttttttttttttttttttttttttttttttttttttttttttttttt..... ABERDEEN GARDENS LEIGH-ON-SEA SOUTHEND-ON-SEA
477641 317000334 NULL NULL 37100003 85000.00 85000.00 ttttttttttttttttttttttttttttttttttttttttttttttttt..... ABERDEEN GARDENS LEIGH-ON-SEA SOUTHEND-ON-SEA
477641 317000334 NULL NULL 37100003 85000.00 85000.00 ttttttttttttttttttttttttttttttttttttttttttttttttt..... ABERDEEN GARDENS LEIGH-ON-SEA SOUTHEND-ON-SEA
477649 317000334 NULL NULL 37100004 591278.00 591278.00 aaaaaaaaaaaaaaaaaaaa ACACIA DRIVE THORPE BAY SOUTHEND-ON-SEA SOUTHEND-ON-SEA
477651 317000334 NULL NULL 37101738 593365.00 593365.00 adfasdsfwerwer ADJACENT TO 51 SANDPIPER CLOSE SHOEBURYNESS SOUTHEND-ON-SEA SOUTHEND-ON-SEA
477661 317000334 NULL NULL 37100036 589791.00 187149.00 ARCHER AVENUE SOUTHEND-ON-SEA SOUTHEND-ON-SEA
487012 317000334 NULL NULL 42203885 359280.00 359280.00 yuiuyiuy ABERDARE CLOSE BURTONWOOD AND WESTBROOK WARRINGTON WARRINGTON
I want this table output as......
id Ref_No css_no haz_no Emp_no X-Fac Y-Fac Location street_name Locale town_name admin_area
341139 317000334 NULL NULL 37101195 588550.00 185922.00 SUTTON ROAD SOUTHEND-ON-SEA SOUTHEND-ON-SEA
477641 317000334 NULL NULL 37100003 582297.00 582297.00 ttttttttttttttttttttttttttttttttttttttttttttttttt..... ABERDEEN GARDENS LEIGH-ON-SEA SOUTHEND-ON-SEA
NULL NULL 85000.00 85000.00
NULL NULL 85000.00 85000.00
477649 317000334 NULL NULL 37100004 591278.00 591278.00 aaaaaaaaaaaaaaaaaaaa ACACIA DRIVE THORPE BAY SOUTHEND-ON-SEA SOUTHEND-ON-SEA
477651 317000334 NULL NULL 37101738 593365.00 593365.00 adfasdsfwerwer ADJACENT TO 51 SANDPIPER CLOSE SHOEBURYNESS SOUTHEND-ON-SEA SOUTHEND-ON-SEA
477661 317000334 NULL NULL 37100036 589791.00 187149.00 ARCHER AVENUE SOUTHEND-ON-SEA SOUTHEND-ON-SEA
487012 317000334 NULL NULL 42203885 359280.00 359280.00 yuiuyiuy ABERDARE CLOSE BURTONWOOD AND WESTBROOK WARRINGTON WARRINGTON
Like wise i need to remove the value which are returning again and agin for the same infomartion... can any one help me with this.... and the table wi'll be generated according with the condition each time so the values may not be same all time...
Upvotes: 0
Views: 106
Reputation: 19356
This is display problem and as such is best dealt with in client application. But if you have no choice but to do it in t-sql you might use row_number() over() to isolate first occurrence of some value and case when then will replace all other occurrence's value with empty string:
; with cte as
(
select *,
row_number() over(partition by id
-- determine order by detail table.
-- I don't know your schema.
order by [y-fac]) rn
from tempTable
)
select case when rn = 1
then convert(varchar(20), id)
else ''
end as id,
case when rn = 1
then convert(varchar(20), Ref_No)
else ''
end as Ref_No,
css_no,
haz_no,
case when rn = 1
then convert(varchar(20), Emp_no)
else ''
end as Emp_no,
X-Fac,
Y-Fac,
case when rn = 1
then Location
else ''
end as Location,
case when rn = 1
then street_name
else ''
end as street_name,
case when rn = 1
then Locale
else ''
end as Locale,
case when rn = 1
then town_name
else ''
end as town_name,
case when rn = 1
then admin_area
else ''
end as admin_area
from cte
order by id, rn
As this looks as master-detail you might do the same while inserting using left join to join to master only if this is first row of detail:
; with ordered as
(
select *,
row_number() over (partition by master_id
order by detail_id) rn
from detail
)
insert into tempTable ( ... )
select ...
from ordered
left join master
on ordered.master_id = master.master_id
and ordered.rn = 1
This will add master data to first row of detail only. Other rows will contain nulls.
Upvotes: 1