也许我对这个问题的看法完全错误,但这里是。
我们有一个数据库,它是我们在办公室使用的某些 CRM 软件的后端。老板想要一个简单的查询来提取客户及其配偶的生日。
表结构如下:
Client Details Table:
Client Name, Client Birthday, Spouse Name, Spouse Birthday, <etc>
我有一个带有案例选择的简单查询,它将确定客户的生日或配偶的生日是否在下个月的任何时间。
查询压缩如下:
SELECT a.*
FROM
(SELECT
(CASE WHEN <birthday calculation>
ELSE NULL
END) as WhoHasBDay,
ClientName,
SpouseName
FROM
ClientDetailsTable) as a
WHERE
a.WhoHasBDay IS NOT NULL
这将返回客户或配偶在接下来的 X 天内过生日的所有条目。
但是,如果客户和他们的配偶在接下来的 X 天内过生日,我希望查询为每人返回一次结果。
IE,这里是下面的数据
CLIENT X: Birthday in 5 days
CLIENT Y: Spouse's Birthday in 8 days
CLIENT Z: Birthday in 3 days, Spouse's Birthday in 9 days.
我想要的结果集是
CLIENT X BDAY T+5
CLIENT Y SPOUSE BDAY T+8
CLIENT Z BDAY T+3
CLIENT Z SPOUSE BDAY T+9
也许我以错误的方式解决了这个问题,在这种情况下,我们将不胜感激关于更好的攻击方法的建议。否则,如果有解决方案,请告诉我。
最佳答案
我会将此作为两个独立查询的 UNION 来处理:一个针对客户,一个针对他们的配偶。
SELECT ClientName, NULL AS SpouseName, Birthday
FROM ClientDetailsTable
WHERE <birthday calculation is true>
UNION ALL
SELECT ClientName, SpouseName, SpouseBirthday
FROM ClientDetailsTable
WHERE <spouse birthday calculation is true>
关于sql - 在 SQL 中,尝试为触发 from 条件的每个实例返回一条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12696548/