![]() |
1
87
传递要分组的表达式,而不是别名
|
![]() |
2
50
我就是这么做的。
此技术以一种简单的方式应用于“编辑”场景:
|
![]() |
3
9
不幸的是,您不能在GROUPBY语句中引用您的别名,您必须再次编写逻辑,这看起来很神奇。
或者,您可以将select放入子select或公共表表达式中,然后可以按列名分组(不再是别名) |
![]() |
4
7
很抱歉,这在MS SQL Server中是不可能的(尽管在PostgreSQL中也是可能的):
否则,请使用以下命令:
或者这个:
上面的查询速度更快,首先对字段进行分组,然后 计算 那些田地。 以下查询速度较慢(它尝试 首先选择表达式,然后根据该计算对记录进行分组)。
|
![]() |
5
3
根据您编辑的问题描述,我建议使用
|
![]() |
6
3
甲骨文也有类似的限制,这很烦人。我很好奇是否有更好的解决办法。 为了回答问题的后半部分,这个限制也适用于更复杂的表达式,例如您的案例陈述。我看到的最好的建议是使用一个子选择来命名复杂表达式。 |
![]() |
7
3
你可以用
|
![]() |
8
1
这是因为您使用的公式(CASE语句)无法为两个不同的输入提供相同的答案。
在这种情况下,“詹姆斯·泰勒”和“约翰·泰勒”都会导致“J·泰勒”。 如果您希望输出两次“J Taylor”(每人一次):
但是,如果您只想要一行“J Taylor”,您会想要:
|
![]() |
9
0
如果希望避免case语句在查询中出现两次混乱,可以将其放在用户定义的函数中。 很抱歉,SQL Server不会在Group By子句之前呈现数据集,因此列别名不可用。你可以按顺序用它。 |
![]() |
10
0
旧时 FoxPro (从2.5版开始我就没用过),你可以这样写:
我真的很喜欢这种语法。为什么它不在其他地方实施?这是一条很好的捷径,但我认为它会导致其他问题? |
![]() |
11
0
|
![]() |
12
0
对于发现自己有以下问题的任何人(通过确保零和空值被视为相等来分组)。。。
(即SQL Server抱怨您没有将字段金额包含在分组依据或聚合函数中) …请记住将完全相同的函数放置在您的SELECT。。。
|
|
Johnny T · 基于当前值的SQL合并表[重复] 5 月前 |
![]() |
John D · 需要为NULL或NOT NULL的WHERE子句 5 月前 |
![]() |
ojek · 如何对SQL结果进行分组和编号? 5 月前 |
![]() |
senek · 如何在PL/SQL中将选择结果(列)放入数组中 5 月前 |
![]() |
Sax · 规范化Google表格(第一步) 5 月前 |
![]() |
Jatin · 检索卷计数的动态sql抛出错误语法错误[关闭] 5 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 6 月前 |