私はSQL Serverで作業しています。私はクエリで助けが必要です。GROUP BY 1つのレコードで
これはシナリオです。
私は2つのテーブルForecast
とOrders
を持っています。
いくつかのフィールドが両方のテーブルで一致し、他のフィールドが一致しません。
私はSELECT
でそれらのすべてを持つことができるかどうかは関係ありません。
ただし、常に一致するフィールドは2つあります。 ID
およびSKU
。
最初にLEFT JOIN
を使用しようとしましたが、ID
とSKU
に1つの列が必要なため、これは機能しません。
次に、私はUNION
の両方のテーブルとそれらによってグループ化しようとしました。
CREATE
とINSERT
のコードは次のとおりです。
CREATE TABLE [dbo].[Tbl_Forecast_Test](
[ID] [varchar](100) NULL,
[CUST_ID] [varchar](40) NULL,
[MFG_PART_NUMBER] [varchar](40) NULL,
[SEGMENT] [varchar](40) NULL,
[WH_NUMBER] [varchar](40) NULL,
[RTM] [varchar](40) NULL,
[FORECAST] [int] NULL
) ON [PRIMARY]
CREATE TABLE [dbo].[Tbl_Orders_Test](
[ID] [varchar](100) NULL,
[END_CUST_ID] [varchar](40) NULL,
[PROD_ID] [varchar](40) NULL,
[PIPELINE] [varchar](40) NULL,
[WAREHOUSE] [varchar](40) NULL,
[RTM_GROUP] [varchar](40) NULL,
[ORDERS] [int] NULL
) ON [PRIMARY]
INSERT INTO [BOSSTest].[dbo].[Tbl_Forecast_Test]
([ID],[CUST_ID],[MFG_PART_NUMBER],[SEGMENT],[WH_NUMBER],[RTM],[FORECAST])
VALUES
('US8098629','','W0P88EP','Comm','471','Direct','10')
INSERT INTO [BOSSTest].[dbo].[Tbl_Orders_Test]
([ID],[END_CUST_ID],[PROD_ID],[PIPELINE],[WAREHOUSE],[RTM_GROUP],[ORDERS])
SELECT 'US8098629','W17445','W0P88EP','Ent Group','1','Direct','5'
UNION ALL
SELECT 'US8098629','W17445','V9G85EP','Ent Group','460','Direct','12'
UNION ALL
SELECT 'US8098629','W17445','V9G85EP','Ent Group','460','Direct','29'
これは私が取得するクローズです。
SELECT
[ID]
,[CUST_ID]
,[END_CUST_ID]
,[SKU]
,[SEGMENT]
,[PIPELINE]
,[WH_NUMBER]
,[WAREHOUSE]
,[RTM]
,[RTM_GROUP]
,SUM ([FORECAST]) AS [FORECAST]
,SUM([ORDERS]) AS [ORDER_LOAD]
FROM (
SELECT
[ID] AS [ID]
,[CUST_ID]
,'' AS [END_CUST_ID]
,[MFG_PART_NUMBER] AS [SKU]
,[SEGMENT]
,'' AS [PIPELINE]
,[WH_NUMBER]
,'' AS [WAREHOUSE]
,[RTM]
,'' AS [RTM_GROUP]
,SUM ([FORECAST]) AS [FORECAST]
,0 AS [ORDERS]
FROM [BOSSTest].[dbo].[Tbl_Forecast_Test]
GROUP BY
[ID]
,[CUST_ID]
,[MFG_PART_NUMBER]
,[SEGMENT]
,[WH_NUMBER]
,[RTM]
UNION ALL
SELECT
[ID] AS [ID]
,'' AS [CUST_ID]
,[END_CUST_ID]
,[PROD_ID] AS [SKU]
,'' AS [SEGMENT]
,[PIPELINE]
,'' AS [WH_NUMBER]
,[WAREHOUSE]
,'' AS [RTM]
,[RTM_GROUP]
,0 AS [FORECAST]
,SUM([ORDERS]) AS [ORDERS]
FROM [BOSSTest].[dbo].[Tbl_Orders_Test]
GROUP BY
[ID]
,[END_CUST_ID]
,[PROD_ID]
,[PIPELINE]
,[WAREHOUSE]
,[RTM_GROUP]
) AS TEST
GROUP BY
[ID]
,[CUST_ID]
,[END_CUST_ID]
,[SKU]
,[SEGMENT]
,[PIPELINE]
,[WH_NUMBER]
,[WAREHOUSE]
,[RTM]
,[RTM_GROUP]
これはクエリを実行したときの結果です。
+---------+-------+-----------+-------+-------+---------+---------+---------+------+---------+--------+----------+
| ID |CUST_ID|END_CUST_ID|SKU |SEGMENT|PIPELINE |WH_NUMBER|WAREHOUSE| RTM |RTM_GROUP|FORECAST|ORDER_LOAD|
+---------+-------+-----------+-------+-------+---------+---------+---------+------+---------+--------+----------+
|US8098629| | |W0P88EP| Comm | | 471 | |Direct| | 10| 0|
|US8098629| | W17445 |V9G85EP| |Ent Group| | 460| | Direct| 0| 41|
|US8098629| | W17445 |W0P88EP| |Ent Group| | 1| | Direct| 0| 5|
+---------+-------+-----------+-------+-------+---------+---------+---------+------+---------+--------+----------+
しかしこれが私の必要です。私はテーブルに異なるSKUを保持したい。
+---------+-------+-----------+-------+-------+---------+---------+---------+------+---------+--------+----------+
| ID |CUST_ID|END_CUST_ID|SKU |SEGMENT|PIPELINE |WH_NUMBER|WAREHOUSE| RTM |RTM_GROUP|FORECAST|ORDER_LOAD|
+---------+-------+-----------+-------+-------+---------+---------+---------+------+---------+--------+----------+
|US8098629| | W17445 |W0P88EP| Comm |Ent Group| 471 | 1|Direct| Direct| 10| 5|
|US8098629| | W17445 |V9G85EP| |Ent Group| | 460| | Direct| 0| 41|
+---------+-------+-----------+-------+-------+---------+---------+---------+------+---------+--------+----------+
1つのレコードでどのようにすることができますIグループID = US8098629
とSKU = W0P88EP
上の任意の提案。事前に
おかげで、 ルイス
MAXを使用して、[ID]、[CUST_ID]、[END_CUST_ID]、[PROD_ID]、[区切り]、[WH_NUMBER]、[WAREHOUSE]、[RTM]、[RTM_GROUP] IDとSKUを除くすべてのフィールドで、()とIDとSKUでグループ化します。しかし、あなたの問題は、あなたが述べているものよりも深刻になる可能性があります。 – scsimon
これについてあなたの考えは何ですか?あなたはなぜそれがより深いと思うのですか? –
オーダー、予測などの集計方法が大規模なデータセットで使用されるため、問題が発生する可能性が高いということです。おそらくそうではないかもしれませんが、そうなるでしょう。非数値型の集計は、null以外の値を取得するために使用されますが、2つの場合は何ですか?これらはあなたが遭遇する可能性のある問題です。 – scsimon