T-SQL の GROUP BY に含めずに、SELECT 部分に BIT 型の列を含めるにはどうすればよいでしょうか? 質問する

T-SQL の GROUP BY に含めずに、SELECT 部分に BIT 型の列を含めるにはどうすればよいでしょうか? 質問する

これが私のT-SQLクエリです

SELECT 
    ProductID,
    VendorID,
    ProductName= MAX(ProductName),
    VendorName = MAX(VendorName),
    IsActive = MAX(IsActive) # This brings error 
FROM ProductVendorAssoc 
GROUP BY  
    ProductID,
    VendorID

GROUP BYフィールドのみに適用したいのですProductID and VendorIDが、ProductID, VendorID, ProductName, VendorName, IsActiveフィールドに入力する必要があります。

ここでは、グループ化リストをMAX(ProductName)回避するためにagreggate 関数を使用しました。ProductName

BITしかし、オペランド データ型ビットは最大演算子では無効であるため、同じトリックは列に対しては機能しません。

に含めずに、T 部分BITにタイプ列を含めるにはどうすればよいですか?SELECGROUP BY

アップデート。

同じように列INTを含める必要がある場合はどうすればいいでしょうか?UserIDSELECT

ベストアンサー1

そこに CASE 式を入れるか、int に変換します。

IsActive = MAX(CASE WHEN IsActive=1 THEN 1 ELSE 0 END)

または、

IsActive = MAX(CONVERT(int,IsActive))

また、当然ながら、結果セット内の ProductName、VendorName、および IsActive 列の値はすべて、基本テーブル内の異なる行から取得される可能性があることにも留意する必要があります。


これら 3 つの列を実際にすべて同じ行から取得したい場合 (SQL Server 2005 以降を想定)、次のようにします。

;With Numbered as (
    SELECT *,ROW_NUMBER() OVER (
        PARTITION BY ProductID,VendorID
        ORDER BY /* Something appropriate, or if we just want random... */ newid()) as rn
    FROM ProductVendorAssoc
)
select
    ProductID,
    VendorID,
    ProductName,
    VendorName,
    IsActive
FROM Numbered where rn=1

おすすめ記事