【发布时间】:2022-01-23 02:02:59
【问题描述】:
我是 SQL 查询的新手,我有一些数据,我正在尝试查找如下所示的结果。
在我的示例数据中,由于多个位置,我的客户 ID 重复多次,我要做的是创建一个查询,以图像输出格式显示输出,
- 如果客户只存在一次我采取该行
- 如果客户存在不止一次,我检查国家;如果
Country = 'US',我会选择那一行并丢弃其他人 - 如果客户存在不止一次且国家/地区不是美国,那么我选择第一行
请注意:我有 35 列,我不想更改 ROWS 顺序,因为我必须选择第一行,以防客户存在多次且国家/地区不是“美国”。
我尝试过的:我正在尝试使用 rank 函数执行此操作,但没有成功。不确定我的方法是否正确,请任何人分享该问题的 T-SQL 查询。
问候, 拉胡尔
样本数据:
需要输出:
【问题讨论】:
-
提问时,您需要提供minimal reproducible example: (1) DDL 和样本数据填充,即 CREATE 表和 INSERT T-SQL 语句。 (2) 你需要做什么,即逻辑和你的代码尝试在 T-SQL 中实现它。 (3) 期望的输出,基于上述#1 中的样本数据。 (4) 您的 SQL Server 版本 (SELECT @@version;)。全部在问题内,没有图片。
-
@YitzhakKhabinsky。谢谢,我会照顾你的观点,虽然问题是我是新手,而且图像是自动拍摄的,我只是从 Excel 中复制了数据。非常感谢您分享帖子详细信息。
-
@marc_s 我正在研究 MSSQL 2016,这只是一个标签,但我觉得无论版本如何,查询逻辑都是相同的。正确吗?
-
如何定义非美国行的顺序?
-
这能回答你的问题吗? Get top 1 row of each group 就用
OVER (PARTITION BY cust_id ORDER BY CASE WHEN country = 'US' THEN 1 ELSE 2 END, country)
标签: sql sql-server-2016