这是我的 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)
避免ProductName
在分组依据列表中。
但同样的技巧不适用于 BIT
列作为操作数数据类型位对于 max 运算符无效。
我怎样才能包含BIT
在 SELEC
中键入列T 部分不包括在 GROUP BY
上?
更新。
如果我需要包含INT
,我应该怎么做?列如 UserID
在SELECT
同样的方式
最佳答案
在其中放入 CASE 表达式,或将其转换为 int:
IsActive = MAX(CASE WHEN IsActive=1 THEN 1 ELSE 0 END)
或者,
IsActive = MAX(CONVERT(int,IsActive))
显然,您还应该意识到,这意味着结果集中的 ProductName、VendorName 和 IsActive 列中的值可能全部来自基表中的不同行。
<小时/>如果您希望这三列实际上都来自同一行(并假设 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
关于sql - 如何在 SELECT 部分中包含 BIT 类型列而不将其包含在 T-SQL 中的 GROUP BY 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6053840/