sql-server - 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,则 row_no 为 1,如果值不是 1,则应返回 max(row_no)-1。
类别应为 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
还没有想出检索类别!
你能帮助正确的方法吗?
解决方案
你的逻辑对我来说并不完全清楚。特别是,我在这里假设您报告的逻辑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;
演示
推荐阅读
- ios - 隐藏标签栏后 UITabBarItem 字体更改
- python - 将数据框中列的值循环到 Python 中的函数
- php - 登录检查不起作用 Laravel-Middleware
- python - 改变用户输入
- python - 有没有办法自动更改 tkiner 窗口的大小以适应小部件?
- javascript - 动态流处理 Node.js
- javascript - 在 Javascript 中运行时(动态)在对象内部创建对象
- python - 导入 sympy 时出现 ImportError
- java - 使用 Java 方法时如何创建不同的延迟?
- java - 自定义 ArrayAdapter 过滤时不更新