これが私の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
にタイプ列を含めるにはどうすればよいですか?SELEC
GROUP BY
アップデート。
同じように列INT
を含める必要がある場合はどうすればいいでしょうか?UserID
SELECT
ベストアンサー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