4

私は.net開発者であり、基本的なCRUD以外のSQLはあまり実行していません。

SQLServer2005にテーブルがあります。

CREATE TABLE [dbo].[Cases](
    [CasesID] [int] IDENTITY(1,1) NOT NULL,
    [Enterprise_Date_Key] [int] NOT NULL,
    [Interval_Num] [int] NOT NULL,
    [QueueID] [int] NOT NULL,
    [TotalCases] [int] NOT NULL,

次のようなデータを使用:

4609    3   0   12455   4532
4610    3   0   12452   7963
4625    3   1   12455   4542
4626    3   1   12452   7993
4627    3   2   12455   4552
4628    3   2   12452   7823
.

そして、私はクエリを実行します:

set @enterpriseDateKey = 3
select QueueID, interval_num, max(TotalCases)
    from Case_Process_Status_Hourly_Fact a  
    where a.Enterprise_Date_Key = @enterpriseDateKey    
    group by QueueID,Interval_Num

結果は次のとおりです。

12452   0   4532
12455   0   7963
12452   1   4542
12455   1   7993
12452   2   4552
12455   3   7823
.
.
.

間隔が列(X軸)でQueueID、行(Y軸)でグループ化されている場合に、データを異なる方法でグループ化するクエリについてサポートが必要です。そのような:

12452   4532    4542    4552    .   .
12455   7963    7993    7823    .   .

私は正直に言うと、望ましい結果を得るためにどちらの方向に進むべきかわかりません。データを取得するために複数のサブクエリを作成する必要があるのか​​、それとも別の方法でグループ化して目的の結果を取得する方法があるのか​​わかりません。どんなアドバイスも非常に役に立ちます。

4

3 に答える 3

1

SQLServerの行から列に結果をピボットする方法は複数あります。この場合、最も明白なアプローチは集約を使用することであるように思われます。

select QueueID,
      max(case when interval_num = 0 then TotalCases end) as Int0,
      max(case when interval_num = 1 then TotalCases end) as Int1,
      max(case when interval_num = 2 then TotalCases end) as Int2,
      max(case when interval_num = 3 then TotalCases end) as Int3,
      . . .
from Case_Process_Status_Hourly_Fact a  
where a.Enterprise_Date_Key = @enterpriseDateKey    
group by QueueID

selectこれは基本的に、ピボットされた列を持つ句を使用したクエリです。SQLでは列数を指定する必要があるので、必要と思われる数を入力してください。

于 2012-12-26T16:04:05.040 に答える
1

SQL Server 2005を使用しているため、次のPIVOT関数を実装することもできます。

select QueueID,
  [0] as Int_0, 
  [1] as Int_1, 
  [2] as Int_2, 
  [3] as Int_3
from
(
  select QueueID, interval_num, TotalCases
  from Case_Process_Status_Hourly_Fact a  
  where a.Enterprise_Date_Key = @enterpriseDateKey   
) src
pivot
(
  max(TotalCases)
  for interval_num in ([0], [1], [2], [3])
) piv

値の数が不明な場合は、interval_num動的SQLを実装してこのデータ変換を実行することもできます。

于 2012-12-26T17:21:38.637 に答える
0

ご覧ください

http://stackoverflow.com/questions/6267660/sql-query-to-convert-rows-into-columns

それはあなたに役立つかもしれません

または、WebでT-SQLを探します。それはあなたを助けることができます。

于 2012-12-26T15:58:54.237 に答える