現時点で得られる出力の例を示すために、以下のクエリの2番目のMAXステートメントを希望どおりに機能させるのに問題があります。
PART FREE_STOCK BIN ME_BIN
01TSC7EM 21.0000 A1E NULL
01TSC7EM010MLG 7.0000 A1E NULL
01TSC7EM010MME 7.0000 218 218
01TSC7EM010MSM 3.0000 407 NULL
01TSC7EM010MXL 4.0000 407 NULL
列の最初のMAXは、短い部分が最も多くBIN
の場所を取得することを意味するグループ化で期待どおりに機能しています。caseステートメントを使用し、同様のロジックに従って、部分の終わりの場所を返すこともできます。同じMAX動作を使用して、短い部分にも設定します。BIN
FREE_STOCK
BIN
'%ME'
これは、列に対して行うのではなく、caseステートメントを使用して値を提供しているためですか?これを機能させる方法について何か提案はありますか?
SELECT dbo.part_bins.part, SUM(dbo.part_bins.free_stock) AS FREE_STOCK, MAX(PART_BINS.BIN) AS Bin,
MAX(CASE WHEN part_bins.part like '%ME' then PART_BINS.BIN END) AS ME_Bin
FROM dbo.part_bins
WHERE dbo.part_bins.free_stock > 0
GROUP BY dbo.part_bins.part
UNION
SELECT part.master_part AS part, SUM(dbo.part_bins.free_stock) AS FREE_STOCK, MAX(PART_BINS.BIN) AS Bin,
MAX(CASE WHEN part.master_part like '%ME' THEN PART_BINS.BIN END) AS ME_Bin
FROM dbo.part_bins
WHERE dbo.part_bins.free_stock > 0
GROUP BY part.master_part
最終結果が次のようになることを願っています。
PART FREE_STOCK BIN ME_BIN
01TSC7EM 21.0000 A1E 218
01TSC7EM010MLG 7.0000 A1E NULL
01TSC7EM010MME 7.0000 218 218
01TSC7EM010MSM 3.0000 407 NULL
01TSC7EM010MXL 4.0000 407 NULL