2017-08-24 13 views
0

私はいくつかのテーブルに以下のような行が含まれています。SQLクエリでグループ化して列を動的に分割する方法は?

ID Date City  Income 
1 2013 Kansas 10$ 
1 2013 Kansas 15$ 
1 2014 Kansas 30$ 
2 2013 Chicago 50$ 
... 

私はそれにこれを変換するようなクエリが必要です。

ID Date City  Income1 Income2 
1 2013 Kansas 10$  15$ 
1 2014 Kansas 30$ 
2 2013 Chicago 50$ 
... 

だから私は、IDによるグループ、日付、その後スプリット収入値の異なる列に.. これは私がそれを達成しようとする方法であるべきであるが、いくつかのことは適切ではありません。

select ID, DATE, MIN(CITY), CONCAT(INCOME,',') from [Sheet 1$] group by ID, DATE 
+2

固定市、年間エントリ数です、またはそれは可変ですか?後者の場合は、おそらく動的SQLを処理する必要があります。 –

+0

変数を使用しないでください。シングルショットが必要です – TyForHelpDude

+1

[C#経由でExcelでクエリを使用する方法]の複製が可能です(https://stackoverflow.com/questions/45855840/how-to-use-group-by- query-in-excel-via-c-sharp)あなたは既にstackoverflowの質問としてこれを持っています - 確かにデータがどこにあるかを決める必要があります - これはまったく同じ – BugFinder

答えて

2
Create table Table1(ID int, Year int, City Varchar(10), Income int) 


Insert Into Table1 Values(1, 2013, 'Kansas', 10) 
Insert Into Table1 Values(1, 2013, 'Kansas', 10) 
Insert Into Table1 Values(1, 2013, 'Kansas', 15) 
Insert Into Table1 Values(1, 2014, 'Kansas', 30) 
Insert Into Table1 Values(2, 2013, 'Chicago', 50) 

Select max(rn) as MaxCol 
From(
     Select *, row_number() over(partition by ID,Year order by ID) as rn 
     From Table1 
    )as Tbl1 


select * 
from 
(
    Select *, row_number() over(partition by ID,Year order by ID) as rn 
    from Table1 
) src 
pivot 
(
    max(Income) 
    for rn in ([1], [2], [3]) 
) piv; 

実際に動的SQLは、年間所得値(カウント)の数が固定されていない唯一のオプションです。

Link to a live demo on SQL Fiddle

+1

私は同意する、この問題に近いです:https://stackoverflow.com/questions/10404348/sql-server-dynamic-pivot-query。あなたは変数なしでそれを取り除くことはできません。 – Exomus

+0

はい、それは今や意味があります、ありがとう – TyForHelpDude

関連する問題