2

私はクエリを作成する初心者であり、これに対する最善のアプローチが何であるかを理解しようとして頭を悩ませてきました。一時テーブルを作成し、クエリを作成して、次のデータから得られた次のデータを取得しました。

SELECT Temp.OrderType,Temp.OrderDate,COUNT(*) as prodCount
FROM Temp
GROUP BY Temp.OrderType, Temp.OrderDate
ORDER BY Temp.OrderType;

結果

OrderType    OrderDate                  prodCount
1            2012-06-04 00:00:00.000    1
1            2012-06-06 00:00:00.000    1
2            2012-06-07 00:00:00.000    2
3            2012-06-05 00:00:00.000    1
3            2012-06-06 00:00:00.000    2
3            2012-06-07 00:00:00.000    1
7            2012-06-05 00:00:00.000    1
11           2012-06-07 00:00:00.000    1

カウントの合計が日付の下にある代わりに、この形式でデータを表示するにはどうすればよいですか? Date1 Date2 などは、6/04、6/05、6/06、6/07 です。ヘルプやガイダンスをいただければ幸いです。ありがとうございます!

OrderType Date1 Date2 Date3 Date4
1            1                1
2                             2
3                1      2     1
4
7                1
11                      1

サンプルデータ

OrderDate                  OrderType
2012-06-06 00:00:00.000    1
2012-06-04 00:00:00.000    1
2012-06-05 00:00:00.000    7
2012-06-05 00:00:00.000    3
2012-06-06 00:00:00.000    3
2012-06-06 00:00:00.000    3
2012-06-07 00:00:00.000    3
2012-06-07 00:00:00.000    2
2012-06-07 00:00:00.000    2
2012-06-07 00:00:00.000    3
2012-06-07 00:00:00.000    11
4

2 に答える 2

1

DBエンジンがMSSQLの場合は、次のことを試してください。

SELECT OrderDate, 
OrderType_1 = SUM(CASE OrderType WHEN 1 THEN 1 ELSE 0 END),
OrderType_2 = SUM(CASE OrderType WHEN 2 THEN 1 ELSE 0 END ),
OrderType_3 = SUM(CASE OrderType WHEN 3 THEN 1 ELSE 0 END),
OrderType_4 = SUM(CASE OrderType WHEN 4 THEN 1 ELSE 0 END),
OrderType_7 = SUM(CASE OrderType WHEN 7 THEN 1 ELSE 0 END),
OrderType_11= SUM(CASE OrderType WHEN 11 THEN 1 ELSE 0 END)
FROM Temp
GROUP BY OrderDate
ORDER BY OrderDate
于 2012-06-11T00:48:27.347 に答える
1

これを試してください

   DECLARE @sql varchar(4000)

    SET @sql =
        '
        SELECT  * 
        FROM    
        (
            SELECT OrderType,CONVERT(VARCHAR(10),OrderDate,112) AS OrderDate,prodCount 
            FROm t 
        )  st
        PIVOT 
        (
        SUM(prodCount)
        FOR OrderDate IN ( '
        +  
        STUFF(
            (
             SELECT ',['  + OrderDate + ']'
             FROM 
                (SELECT distinct CONVERT(VARCHAR(10),OrderDate,112) AS OrderDate  FROM t)  a
             FOR XML PATH('')
             ),1,1,'')
        + ')
        ) as pvt
        ORDER BY pvt.OrderType
        '

    PRINT @sql
    EXEC(@sql)

SQLFiddle リンク

于 2012-06-11T16:17:25.453 に答える