首页 > 解决方案 > SQL 服务器 | 找出计数和类别

问题描述

表 A

Owner   row_no   category
-------------------------
A        1         U
B        1         T
B        2         T
C        1         U
C        2         T
C        3         U
C        4         U

我正在寻找一种将值存储到应该检索的其他表中的解决方案

  1. 如果值为 1,则 row_no 为 1,如果值不是 1,则应返回 max(row_no)-1。

  2. 类别应为 T 或 U 或两者都取决于所有者是否在表 A 中选择了仅 T 或 U 或两者。

预期的表格输出应如下所示。

Owner   row_no   category
---------------------------
A        1         U
B        1         T
C        3        Both

我尝试使用以下方法,但结果是错误的。

SELECT * 
INTO B 
FROM A
WHERE ROW_NO LIKE CASE
                     WHEN ROW_NO = 1 THEN ROW_NO
                                     ELSE MAX(ROW_NO) - 1
                  END

还没有想出检索类别!

你能帮助正确的方法吗?

标签: sql-serversql-server-2008

解决方案


你的逻辑对我来说并不完全清楚。特别是,我在这里假设您报告的逻辑row_no是在所有者的最大值为 1 时返回 1,否则返回该最大值减 1。

我们可以在这里尝试做一个简单的聚合查询来生成你想要的。

SELECT
    Owner,
    CASE WHEN MAX(row_no) = 1 THEN 1 ELSE MAX(row_no) - 1 END AS row_no,
    CASE WHEN COUNT(DISTINCT category) > 1 THEN 'Both' ELSE MAX(category) END AS category
FROM tableA
GROUP BY
    Owner;

在此处输入图像描述

演示


推荐阅读