SELECT语句生成的字段的条件

时间:2018-11-08 21:18:47

标签: sql sql-server tsql

SELECT
        Req_PK, 
        Req_PostDate, 
        Req_code, 
        Req_CreateDate, 
        Req_FillDate, 
        Req_Canceldate, 
        Req_Hold, 
        (
            Select Convert(varchar(50),Count(CanReq_PK)) 
            From CanReq 
            Where CanReq_ReqFK = Req_PK) AS Applications, 
        Req_PublishstatusFK 
FROM Req
WHERE Req_Filled <> 1 
AND Req_Cancelled <> 1 
AND Req_Template <> 1 
AND Req_PublishstatusFK = 1 
AND Req_publishstatusfk = 1

如何修改此查询,以便“应用程序”字段/别名不是SELECT语句返回的所有内容,而是除值为“ 0”的内容以外的所有内容?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

改为使用显式JOIN

SELECT r.Req_PK, r.Req_PostDate, r.Req_code, r.Req_CreateDate, r.Req_FillDate, 
       r.Req_Canceldate, r.Req_Hold, 
       cr.num_Applications, 
       r.Req_PublishstatusFK
FROM Req r JOIN
     (SELECT cr.CanReq_ReqFK, Count(*) as num_applications
      FROM CanReq cr
      GROUP BY cr.CanReq_ReqFK
     ) cr
     ON cr.CanReq_ReqFK = r.Req_PK
WHERE r.Req_Filled <> 1 AND r.Req_Cancelled <> 1 AND r.Req_Template <> 1 AND
      r.Req_PublishstatusFK = 1 AND r.Req_publishstatusfk = 1;

这将过滤掉CanReq中没有记录的所有行,即在您的查询版本中计数为0的行。

我不知道您为什么要让计数为字符串。当然,您可以在需要时将其包括在内,但对我而言似乎没有必要。