如何在 SELECT 部分中包含 BIT 类型列而不在 T-SQL 中的 GROUP BY 中包含它?
Posted
技术标签:
【中文标题】如何在 SELECT 部分中包含 BIT 类型列而不在 T-SQL 中的 GROUP BY 中包含它?【英文标题】:How to include BIT type column in SELECT part with out including it on the GROUP BY in T-SQL? 【发布时间】:2011-08-28 13:43:12 【问题描述】:这是我的 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
字段。
这里我使用了 agreggate 函数 MAX(ProductName)
来避免 group by 列表中的 ProductName
。
但同样的技巧不适用于BIT
列,因为操作数数据类型位对 max 运算符无效。
我如何在SELEC
T 部分中包含BIT
类型列而不在GROUP BY
中包含它?
更新。
如果我需要以相同的方式在SELECT
中包含INT
之类的UserID
列,我应该怎么做
【问题讨论】:
这是 SQL Server 2008,但我也需要在 2005 年启动它 @marc_s 我从问题中省略了那部分查询 【参考方案1】:在其中放一个 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
【讨论】:
如果我需要以同样的方式在 SELECT 中包含像 UserID 这样的 INT 列,我应该怎么做 @Mithun P - 同样,您可以使用该列上的MAX
(具有相同的免责声明),或切换到我显示的其他声明风格。
是否应该在SELECT *,ROW_NUMBER() OVER (
行中添加“rn =
”?像这样:SELECT *,rn = ROW_NUMBER() OVER (
@WillNewton - 有两种方法可以关联别名 - alias = expression
或 expression as alias
- 我使用了第二种形式,但它向右滚动。
索引视图怎么样?由于我们不能在索引视图中使用 MAX(),有没有办法在索引视图中处理它?
【参考方案2】:
更短的方法:
IsActive = MAX(0+IsActive)
【讨论】:
隐式类型转换?【参考方案3】:在 SQL2005/2008 中,这将如下所示:
select ProductId, VendorId, ProductName, VendorName, IsActive
from
(
select *, row_number() over (partition by ProductId, VendorId order by ProductId) RowNumber
from Production.Product
) tt
where RowNumber = 1
【讨论】:
以上是关于如何在 SELECT 部分中包含 BIT 类型列而不在 T-SQL 中的 GROUP BY 中包含它?的主要内容,如果未能解决你的问题,请参考以下文章
使用 REST Api,如何在我的类型化请求模型中包含“任何类型的 json”?
如何在 Java 中的 Prepared Select 语句中包含参数? [复制]
#1349 - 视图的 SELECT 在 FROM 子句中包含一个子查询
如何在 select 语句中包含 PERCENTILE_CONT 列,而不会生成有关 ORDER BY 子句或聚合函数的错误?