2

私は初心者の SQL プログラマーで、午前中ずっとこれに頭を悩ませてきました。私の状況は次のとおりです。e コマース Web サイトに送信する必要がある SKU のテーブルがあります。これらの各 SKU には、「数量」、「アクティブ」値、および「生産中止」値があります。これは、一度に 1 つの SKU を扱っていたときは簡単に処理できましたが、今では 1 つ以上の SKU を含むキットを送信する必要があります。

たとえば、キットの ID が 000920_001449_001718_999999 (4 つの SKU の組み合わせ) の場合、次のように SKU のセット全体のデータを収集する必要があります。

クエリの結果

組み込む必要があるロジックは次のとおりです。

  1. いずれかの SKU の IsActive 値が null または WEBNO の場合、キット全体が WEBNO を返す必要があります。それ以外の場合は、WEBYES を返します。
  2. いずれかの 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 フィールドをまだ考慮し始めていません。これを一緒に解析する簡潔な方法、またはこの種の問題を処理するより良い方法はありますか?

4

2 に答える 2

2

ISNULLMIN/の組み合わせでうまくいくと思いますMAX

SELECT
    MIN(ISNULL(sending.IsActive, 'WEBNO')) AS IsActive,
    MAX(ISNULL(sending.IsDiscontinuted, 1)) AS IsDiscontinuted
FROM 
( 
    SELECT * FROM [eCommerce].[dbo].[Split] (
      '000920_001449_001718_999999'
      ,'_') 
) AS SplitSkus 
LEFT JOIN #SkusToSend AS Sending
    AS Sending.SKU = SplitSkus.items
于 2013-02-07T19:43:10.220 に答える
1

これらのテーブルにいくつかのサンプルデータの実例があれば、これは簡単になると思います。推測すると、文字列を分割して複数の行を提供するテーブル関数があるようです。それに直接結合するいくつかの一時テーブルがあるため、関数を取得し、一時テーブルにnullがある場合でも、取得したすべての行を本質的に返します。これにより、左または右の結合で単一のエンティティが期待され、倍数を取得するときに null が存在するという条件があるかのように、複数の行が返される可能性があります。または、値を繰り返すと、倍数が得られます。私があなたから信じている結果を1つ1つ確実に得る必要があります。

Case when 'WEBNO' in 
(

「WEBNO」の回答を返すロジックは正しいかもしれませんが、エンジンが「これが起こった」を 1 回、2 回、3 回解釈する可能性があるため、行の結果が複数回繰り返される可能性があります。潜在的に行うことでこれを軽減できます

'Select Distinct IsActive'

これにより、式はその列の戻り値とは異なる単一の結果のみを返すようになります。

繰り返しますが、オブジェクトに含まれるデータの例を見ることができれば簡単ですが、これは私の推測です。

于 2013-02-07T19:26:58.027 に答える