查找根据条件同时存在和不存在的值(SQL Server)

时间:2018-06-20 16:07:18

标签: sql sql-server

我对SQL很陌生。我有一个带有“ Model_Id”和“ Tran_date”列的“交易”表。我有另一个“模型”表,其中包含“模型名称”和“模型名称”列。我想要“交易”表中所有在2017年而不是2018年出售的模型名称。如何使用Where语句在SQL Server中获得所需的值?

2 个答案:

答案 0 :(得分:2)

欢迎使用堆栈溢出。尽管我在发布这样的问题时在此处提供了答案(以伪SQL的形式),但您实际上确实需要提供示例数据和预期的结果。否则,这里的志愿者不得不猜测您的DDL和数据,这可能意味着它是错误的(但可能会有帮助)。

但是,如上所述,这是伪SQL,但应该可以帮助您:

SELECT YourColumns
FROM Model M
WHERE EXISTS (SELECT 1
              FROM [Transaction] T
              WHERE T.ModelID = M.ModelID
                AND T.TranactionDate >= '20170101'
                AND T.TranactionDate < '20180101')
  AND NOT EXISTS (SELECT 1
                  FROM [Transaction] T
                  WHERE T.ModelID = M.ModelID
                    AND T.TranactionDate >= '20180101'
                    AND T.TranactionDate < '20190101');

答案 1 :(得分:0)

希望这会有所帮助!

SELECT m.Model_Name
FROM Transactions t
JOIN Model m on m.model_id=t.model_id
    and year(t.tran_date)=2017
LEFT JOIN Model mm on mm.model_id=t.model_id
    and year(t.tran_date)=2018
WHERE mm.model_id is null