【发布时间】:2021-05-02 20:02:54
【问题描述】:
编辑: 让我再尝试一次。这里使用了两个主要的表。一个叫做 General,我需要用它来加入另一个叫做 Customer 的表。客户有 COLUMNS 列,例如名字、姓氏、年龄等。每个查询只有 1 条记录,但该记录可能包含两个客户。我想对新的 CASE 列进行分组,将 c1 和 c2 的年龄分组。
所以我下面的问题是,如果我想单独为每个客户创建一个新列(很棒),但我只需要 GROUP BY 一个新的 CASE,因为我希望分组不包括假设一个 40 岁的客户 2 在 20-30 分组中,如果客户 1 在该分组中,就会发生这种情况。这有意义吗?如果不以某种方式创建新表,我看不到这是怎么可能的,但我根本不想修改数据库。对不起,如果这没有意义,但我继承了这个并试图解决这个问题一直让我发疯。我现在可以做到这一点的唯一方法是 excel 并手动移动值,然后使用数据透视表。这里是代码的症结所在: 选择 gn.一般, c1.cusstage1 AS 'Customer1 Age', c2.cusstage2 AS '客户 2 年龄', 案子 当 c1.custage 介于 20-30 之间,然后是 '20-30' 当 c2.custage 介于 20-30 之间,然后是 '20-30' 以“年龄组”结尾 来自一般 gn 在 c1.general = g.general 和 c1.general = "CUST1" 上左加入客户 在 c2.cusstage = g.general AND c2.general = "CUST2" 上左加入客户
然后,我在我的表中添加了一个父组,按 AGEGROUP 分组,这看起来很棒,但没有将 c2.cusstage 分解为正确的类别。我知道逻辑有缺陷,只是想不出如何解决这个问题。明明还在学习。 提前感谢您的任何反馈。
我在一次销售中有 2 位客户,一位有 c.cusstage1,一位有 cusstage2。尝试将两个年龄分组到一个新列中并显示总数,例如:
CASE
WHEN c.custage1 BETWEEN 20-30 THEN '20-30'
WHEN c.custage2 BETWEEN 20-30 THEN '20-30'
END AS 'AGEGROUP'
但这不起作用。我想将两个客户年龄的小组总结作为一个总结。我不想在表中添加任何新列。谢谢!
【问题讨论】:
-
Why should I "tag my RDBMS"? - 请添加标签以指定您使用的是
mysql、postgresql、sql-server、oracle还是db2- 或其他完全不同的东西。跨度> -
已更新到 SQL Server,谢谢
-
case是一个表达式而不是一个语句 -
但这不起作用。 - 这什么也没告诉我们,你能告诉我们你得到什么错误信息吗?
-
如果它没有返回您想要的值,那么您需要显示一些示例数据、您的实际结果和您的预期结果。如图所示,您的代码不能同时显示 cust 1 年龄和 cust 2 年龄。所以你的问题一定是遗漏了什么。
标签: sql sql-server group-by case