sql - 如何在 SELECT 部分中包含 BIT 类型列而不将其包含在 T-SQL 中的 GROUP BY 中?

标签 sql tsql group-by aggregate

这是我的 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 运算符无效。

我怎样才能包含BITSELEC 中键入列T 部分不包括在 GROUP BY 上?

更新。

如果我需要包含INT,我应该怎么做?列如 UserIDSELECT同样的方式

最佳答案

在其中放入 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/

相关文章:

php - Count/Group By/Order By 只显示最常见值的计数而不是字符串本身

sql - 将任何查询结果转换为字符串

sql - 什么是变化?

tsql - 如何确定联结表中是否存在值并返回零或一?

sql - 无法连接到 SQL Server - 登录失败

php - 打开购物车 - MySQL 查询客户列表

php - CakePHP 不会按条件应用组

mysql - Django 外键约束

SQL 查询 - 计数 - 最大值

小数列的 SQL Sum 函数返回 int 而不是 decimal