2

私は SQL のピボットについて調べ、たくさんの例を見てきましたが、思い通りに動作させることができません。従業員の購入を追跡するトランザクション履歴テーブルがあります。

例:

Employee | Date       | Value
1234     | 2012-11-13 | 20.23

次のように、毎月の総売上高を含む全従業員の概要を作成する必要があります。

Employee | Jan | Feb | Mar | ... | Dec| YearTotal

グループ化と月間合計の取得について混乱しています。助けてくれてありがとう!

編集 わかりました。支援を要請する準備ができていないと思われた場合は、お詫び申し上げます。私は一日中これに取り組んでいて、イライラして疲れていました。私は SQL で 10 年以上の経験がありますが、ピボット クエリを実行しようとしたのはこれが初めてであり、どのように機能するのか、どのように機能させるのかについて頭を悩ませているだけです。私のニーズのために。月曜日の朝にこれらの数値を作成する必要があるため、約 7 時間かかります。私の最後の溝の努力は、月ごとに個別のクエリを実行し、レポート用にデータを Excel にダンプすることです。エンドユーザーが将来実行できるように、これをシームレスにしたいと思います。

これは、MSDN のサンプルから作り直された私の試みの簡略化されたバージョンです。

SELECT CUSTOMER_NUMBER, [jan], [feb]
FROM 
    (
    SELECT month(transaction_date)
    FROM customer_item_purchases
    WHERE TRANSACTION_DATE BETWEEN '2011-11-16' AND '2012-11-15'
    )
PIVOT
(SUM(SALES_VALUE) IN ([JAN], [Feb]))
AS pvt

指定された日付の間の各月の月間総売上高が必要です。11 月は、月の初めと終わりの列に表示されます。ソース テーブルは単純です: 従業員、取引日、領収書、場所など。

4

2 に答える 2

3

フィドルの例(ログインしていない場合に保存されるかどうかはわかりませんが、現在は機能しています:http://sqlfiddle.com/#!6/8c96a/3/15

ピボットしたのは 3 か月だけですが、うまくいけばアイデアが得られます。通常、特定の列でのみピボット/グループ化する必要があるため、From の後にネストされた Select があります。FOR mnth IN ( [1], [2], [3] )次に、ピボットが発生し、フィールドに対応する列名にしたい値をリストしますMonth(Date) as mnth

Create table Sales
( EmpId int, Date DateTime, Value integer );

Insert Into Sales (EmpId, Date, Value)
Values (1,'1/1/2012', 12);
Insert Into Sales (EmpId, Date, Value)
Values (1,'2/1/2012', 12);
Insert Into Sales (EmpId, Date, Value)
Values (1,'3/1/2012', 12);
Insert Into Sales (EmpId, Date, Value)
Values (1,'4/1/2012', 12);
Insert Into Sales (EmpId, Date, Value)
Values (1,'5/1/2012', 12);
Insert Into Sales (EmpId, Date, Value)
Values (1,'6/1/2012', 12);
Insert Into Sales (EmpId, Date, Value)
Values (1,'7/1/2012', 12);

Insert Into Sales (EmpId, Date, Value)
Values (2,'1/1/2012', 112);
Insert Into Sales (EmpId, Date, Value)
Values (2,'1/15/2012', 112);
Insert Into Sales (EmpId, Date, Value)
Values (2,'2/1/2012', 312);
Insert Into Sales (EmpId, Date, Value)
Values (2,'3/1/2012', 512);
Insert Into Sales (EmpId, Date, Value)
Values (2,'4/1/2012', 2);
Insert Into Sales (EmpId, Date, Value)
Values (2,'5/1/2012', 3);
Insert Into Sales (EmpId, Date, Value)
Values (2,'6/1/2012', 1);
Insert Into Sales (EmpId, Date, Value)
Values (2,'7/1/2012', 0);


SELECT EmpID, [1], [2], [3]
FROM 
(SELECT EmpID, Month(Date) as mnth, Value
FROM Sales) p
PIVOT
(
  Sum (Value)
  FOR mnth IN
( [1], [2], [3] )
) AS pvt
ORDER BY pvt.EmpID;
于 2012-11-12T08:32:00.900 に答える
0

各月 (1、2、3、...、12) と 3 桁の月コード ('Jan'、'Feb'、'Mar'、...、 「12月」)。合計でラップされた一連の case ステートメントを使用して、各従業員の特定の月の売上のみをカウントし、従業員ごとにグループ化することもできます。

これは、データベースの 2 つの基本的な概念であるグループ化と結合の問題です。私はあなたに私の答えを与えることができます.

于 2012-11-12T08:15:21.770 に答える