首页 > 解决方案 > 在 SQL Server 中,如何使用 concat 列连接 --> 组

问题描述

SELECT
    'dbo.our_table' as table_name,
    CONCAT(col1, '-', col2, '-', col3) as table_id,
    COUNT(*) as ct 
FROM dbo.our_table
group by table_name, table_id
-- group by 1, 2 -- this doesn't work either...
order by ct desc

这在 SQL Server 中不起作用,因为它无法识别 table_name 或 table_id。我知道这可以通过将第二个SELECT子句嵌套到中来完成FROM,因此 table_name 和 table_id 是明确可用的,但是我试图了解是否可以在不必创建嵌套SELECT语句的情况下实现此输出,而是通过保持我当前查询的结构,但只进行了调整。

谢谢

标签: sqlsql-servertsql

解决方案


如评论中所述,您需要将 3 列(col1, col2& col3)放入GROUP BY. 与这 3 列不同,因为它是字符串,所以dbo.our_table不需要。GROUP BY

SELECTSQL Server以特定顺序执行查询的组件,从FROM、 然后WHEREGROUP BY等开始。在这种情况下,SQL Server 无法识别别名table_name& table_idGROUP BY因为它们直到. 之后才被设置SELECT,后者在 . 之后执行GROUP BY。谷歌搜索“SQL Server SELECT 查询执行顺序”应该会为您提供一些资源,这些资源将更详细地解释执行顺序。


推荐阅读