我目前的数据如表A所示。
Title_1 | Contract A
Title_1 | Contract B
Title_1 | Contract C
Title_2 | Contract A
Title_2 | Contract D
我正在使用
SELECT DISTINCT T2.Title, SUBSTRING(
SELECT '; ' + Contract as [text()]
FROM dbo.TitleContracts T1
WHERE T1.Title = T2.Title
AND Contract IN (
SELECT Contract FROM dbo.ValidContracts
)
FOR XML PATH ('')
), 2, 1000) [ContractList]
FROM dbo.TitleContracts T2
以上查询将数据转换为以下结果。然而,我还想做的是使用未选择的ValidContracts表找到每个标题的合同列表。因此,如果我们有合同A-D,则Title_1将返回合同D,而Title_2将返回合同B&合同C.
Title_1 | Contract A; Contract B; Contract C
Title_2 | Contract A; Contract D
我可能会想到这一点,但我所尝试过的任何事情似乎都没有把我带到正确的方向。我并没有要求你编写我的代码,但是向正确的方向推进将是惊人的。
答案 0 :(得分:2)
好的,不要使用IN来查看ValidContracts,而是对它进行RIGHT JOIN,并过滤左侧为NULL的行。
答案 1 :(得分:1)
使用CTE:
SELECT DISTINCT (user_id) user_id, a.value
FROM user_reg ap
JOIN user_extra a USING (user_id)
WHERE ap.session_date BETWEEN '2017-01-01' AND '2017-06-10' AND a.session_date<='2017-01-01'