I'm trying not to use a temp table, but i may have to do so..
i have a derived table that makes the following results:
ID Status Name
2 1 "A"
2 2 "B"
I want to get the following:
ID Name1 Name2
2 "A" "B"
but like I said before, I can't repeat the query that gets the first 2 rows, as it's pretty invovled. a temp table is the best route I see right now, but I just wanted to be sure I'm not missing something.
Here it is,
Code Snippet
Create Table #data (
[ID] int ,
[Status] int ,
[Name] Varchar(100)
);
Insert Into #data Values('2','1','A');
Insert Into #data Values('2','2','B');
Select
Id
,max(case when Status=1 Then [Name] end) [name1]
,max(case when Status=2 Then [Name] end) [name2]
from
(
Select * from #data -- Your Derived Table
) as Data
Group By
Id
|||
The solution will work, I just needed to think about how to expand it for more columns, but I got it now.
If it's very very slow, I will try something with a CTE - I think that'll work as well.
|||The CTE was 50-60% faster than the other route! but that method is also useful if using sql2000.|||
Yeah a CTE is going to be the way to go on this in 2005 for sure. Never been a fan of using temp tables and I avoid them when I can. So here's my own variation on the above sample...
Code Snippet
SELECT
[ID],
max(case when Status=1 Then [Name] end) [name1],
max(case when Status=2 Then [Name] end) [name2]
from (
SELECT 2 As [ID], 1 As Status, 'A' As [Name]
UNION SELECT 2, 2, 'B'
) AS Data
GROUP BY [ID]
No comments:
Post a Comment