私は初心者の SQL プログラマーで、午前中ずっとこれに頭を悩ませてきました。私の状況は次のとおりです。e コマース Web サイトに送信する必要がある SKU のテーブルがあります。これらの各 SKU には、「数量」、「アクティブ」値、および「生産中止」値があります。これは、一度に 1 つの SKU を扱っていたときは簡単に処理できましたが、今では 1 つ以上の SKU を含むキットを送信する必要があります。
たとえば、キットの ID が 000920_001449_001718_999999 (4 つの SKU の組み合わせ) の場合、次のように SKU のセット全体のデータを収集する必要があります。
組み込む必要があるロジックは次のとおりです。
- いずれかの SKU の IsActive 値が null または WEBNO の場合、キット全体が WEBNO を返す必要があります。それ以外の場合は、WEBYES を返します。
- いずれかの SKU の IsDiscontinued 値が null または '1' の場合、キット全体が IsDiscontinued = '1' を返す必要があります。それ以外の場合は、0 を返します。
私のコードは少し混乱していますが、これまでに管理したものは次のとおりです。
SELECT
CASE WHEN 'WEBNO' in
(
SELECT IsActive
FROM #SkusToSend as Sending
RIGHT JOIN
(
SELECT * FROM [eCommerce].[dbo].[Split] (
'000920_001449_001718_999999'
,'_')
) as SplitSkus
on Sending.SKU = SplitSkus.items
) THEN 'WEBNO'
ELSE 'WEBYES'
END
私の質問は次のとおりです。「IsActive」と「IsDiscontinued」の 1 行のみを返す、サンプル テーブルを解析するステートメントを作成することは可能ですか? これらのフィールドで GROUP BY および HAVING ステートメントを使用してみましたが、常に複数の行が返されます。
私が持っているコードは WEBNO 値を処理しますが、NULL は処理せず、IsDiscontinued フィールドをまだ考慮し始めていません。これを一緒に解析する簡潔な方法、またはこの種の問題を処理するより良い方法はありますか?