sql - 在 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
语句的情况下实现此输出,而是通过保持我当前查询的结构,但只进行了调整。
谢谢
解决方案
如评论中所述,您需要将 3 列(col1
, col2
& col3
)放入GROUP BY
. 与这 3 列不同,因为它是字符串,所以dbo.our_table
不需要。GROUP BY
SELECT
SQL Server以特定顺序执行查询的组件,从FROM
、 然后WHERE
、GROUP BY
等开始。在这种情况下,SQL Server 无法识别别名table_name
& table_id
,GROUP BY
因为它们直到. 之后才被设置SELECT
,后者在 . 之后执行GROUP BY
。谷歌搜索“SQL Server SELECT 查询执行顺序”应该会为您提供一些资源,这些资源将更详细地解释执行顺序。
推荐阅读
- javascript - 如何在 Sentry 上设置源地图
- c - C 编程:“sizeof”对不完整类型“Tipo {aka struct ElemSCl}”的无效应用
- javascript - 引导验证:使用引导验证和 Jquery 验证的最佳实践:以下是否正确?有什么建议吗?
- python - 打印单个函数返回的两个列表
- linux - 须藤百胜安装
在 AWS Linux ec2 上给出奇怪的错误(SyntaxError:无效语法) - python - 为什么我的任务项没有插入到 mysql 数据库表中
- flutter - 颤动动画加速或速度变化
- reactjs - 如何在 react-datetime 选择器中获取 e.target.name?
- reactjs - 新版本中的反应状态使用
- google-oauth - 尝试授权 quickstart.py - 浏览器错误 (lynx) 中未启用 javascript