1

2つのテーブル(tblBestsellerstblAllsellers)があります。

  • tblAllsellersショップ内のすべての本が含まれています
  • tblBestsellers割り当てを超えて販売されたもののみが含まれます。

それらの間の唯一のリンクはそれらですproductID

Bestseller実行時にタイトルの列を追加することは可能ですか?その本がベストセラーであったかどうかを示すクエリを使用する

ProductID   - Product Name  - Bestseller   
----------------------------------------
324234        Harry Potter        Y
382932        LOTHR               Y
234292        SQL Guide           N

等々。

どこかにIFステートメントがあるのではないでしょうか?

SELECT *
FROM tblAllsellers, tblbestsellers
4

2 に答える 2

2

ProductIDに対してLEFT JOINoftblAllSellersを実行する必要があります。tblBestSellers特定の ProductIDのレコードが にある場合tblBestSellers、それはベストセラーであり、そうでないことを意味します。CASEそのため、最後の列のステートメントでこの列を使用できますBestSeller

SELECT 
    A.*, 
    CASE 
        WHEN B.ProductId IS NULL THEN 'N' 
        ELSE 'Y' 
    END 'BestSeller'
FROM 
    tblAllSellers A
    LEFT JOIN tblBestSellers B
    ON A.ProductId = B.ProductID

次のように、JOIN を使用した別のクエリでこれを使用します。

 SELECT A.* 
 FROM 
     AnotherTable X
     JOIN 
     (
        SELECT 
            A.*, 
            CASE 
                WHEN B.ProductId IS NULL THEN 'N' 
                ELSE 'Y' 
            END 'BestSeller'
        FROM 
            tblAllSellers A
            LEFT JOIN tblBestSellers B
            ON A.ProductId = B.ProductID
     ) AS Y
     ON X.ProductId = Y.ProductID

このクエリの結果を別のクエリの結果と結合する場合は、次のようにします。

 SELECT A.ProductId, A.COlumn1, A.Column2 ...
 FROM 
     AnotherTable X

 UNION 
 SELECT Y.ProductId, Y.Column1, Y.Column2..
 FROM
 (
 SELECT 
      A.*, 
      CASE 
           WHEN B.ProductId IS NULL THEN 'N' 
           ELSE 'Y' 
      END 'BestSeller'
 FROM 
      tblAllSellers A
      LEFT JOIN tblBestSellers B
      ON A.ProductId = B.ProductID
 ) AS Y

UNION シナリオでは、両方の SELECT ステートメントの列の数とデータ型が同じであることを確認してください。

于 2012-12-03T14:55:59.380 に答える
0

Caseステートメントをより適切に使用できます。

 SELECT A.*, CASE WHEN B.ProductId IS NULL THEN 'N' ELSE 'Y' END 'BestSeller'
 FROM 
tblAllSellers A, tblBestSellers B
where A.ProductId = B.ProductID
于 2012-12-03T14:56:28.597 に答える