2017-08-25 1 views
1

Ich habe verschiedene Tabellen durch I temporäre Tabelle gemacht und hier ist das Ergebnis einer temporären Tabelle:Wie mehrere Zeilen in einer Zeile und mehreren Spalte in SQL Server kombinieren?

 car_id | car_type | status | count 
    --------+----------+---------+------ 
    100421 | 1  | 1  | 9 
    100421 | 1  | 2  | 8 
    100421 | 1  | 3  | 3 
    100421 | 2  | 1  | 6 
    100421 | 2  | 2  | 8 
    100421 | 2  | 3  | 3 
    100422 | 1  | 1  | 5 
    100422 | 1  | 2  | 8 
    100422 | 1  | 3  | 7 

Hier ist die Bedeutung der Statusspalte:

  • 1 als Verkauf
  • 2 als kaufen
  • 3 als Rück

Jetzt habe ich dieses resul zeigen wollen t wie unten eingestellt

car_id | car_type | sale | purchase | return 
    --------+----------+------+----------+---------- 
    100421 | 1  | 9 | 8  | 3 
    100421 | 2  | 6 | 8  | 3 
    100422 | 1  | 5 | 8  | 7 

Ich habe versucht, aber nicht in der Lage, diese Ergebnismenge zu generieren. Kann jemand helfen?

Antwort

3

Versuchen Sie, diese

select car_id ,car_type, [1] as Sale,[2] as Purchase,[3] as [return] 
from (select car_id , car_type , [status] ,[count] from tempTable)d 
pivot(sum([count]) for [status] in([1],[2],[3])) as pvt 

können Sie auch die Unterabfrage entfernen, wenn Sie eine Bedingung haben keine wie

select car_id ,car_type, [1] as Sale,[2] as Purchase,[3] as [return] 
from tempTable d 
pivot(sum([count]) for [status] in([1],[2],[3])) as pvt 
+0

arbeiten nicht für car_type – Umer

+0

Es tut mir Leid, I'v die Abfrage bearbeiten, nachdem nun die Prüfung ihrer Arbeits –

3

Sie können auch einen CASE Ausdruck verwenden.

Abfrage

select [car_id], [car_type], 
max(case [status] when 1 then [count] end) as [sale], 
max(case [status] when 2 then [count] end) as [purchase], 
max(case [status] when 3 then [count] end) as [return] 
from [your_table_name] 
group by [car_id], [car_type] 
order by [car_id]; 
Verwandte Themen