如何编写SQL查询以忽略具有空值的重复行

时间:2019-04-02 11:30:20

标签: sql

我的视图显示我不需要的重复行。

我要

1, YM
1, NULL
2, YM
2, NULL

使用以下代码

SELECT 
   dbo.Store.SID,
   CASE WHEN dbo.Store.SID <> dbo.FileStore.SID THEN NULL 
        WHEN dbo.FileStore.MailSent = 'M' THEN 'YM' 
        WHEN dbo.FileStore.SID = dbo.Store.SID AND dbo.FileStore.FileType = 1 THEN 'Y' 
   ELSE NULL END AS FM 
FROM 
dbo.STORE 
    INNER JOIN dbo.FileStore ON dbo.Store.SID = dbo.FileStore.SID

我正在寻找

1 YM
2 YM

2 个答案:

答案 0 :(得分:1)

您似乎想要过滤。如果我理解正确:

SELECT s.SID,
       (CASE WHEN fs.MailSent = 'M' THEN 'YM'
             WHEN fs.FileType = 1 THEN 'Y' 
        END) AS FM
FROM dbo.STORE s INNER JOIN
     dbo.FileStore fs
     ON s.SID = fs.SID
WHERE fs.MailSent = 'M' OR fs.FileType = 1;

没有理由在JOIN表达式中重复CASE条件。您知道,由于JOIN,它们是正确的。

答案 1 :(得分:0)

SELECT 
dbo.Store.SID
,CASE 
   WHEN dbo.Store.SID <> dbo.FileStore.SID THEN NULL --will never happen since it's an inner join
   WHEN dbo.FileStore.MailSent = 'M' THEN 'YM' 
   WHEN dbo.FileStore.SID = dbo.Store.SID --will happen always since it's an inner join
     AND dbo.FileStore.FileType = 1 THEN 'Y' 
   ELSE NULL -- this is the cause for Null, you have FileStore.MailSent <> 'M'
 END AS FM
FROM dbo.STORE 
INNER JOIN dbo.FileStore
     ON dbo.Store.SID = dbo.FileStore.SID