SQL - 查询中的条件 ISNULL 语句



我使用以下查询来收集有关每个ProductId的一些信息 - 请注意,ProductId可以在dbo.Sales表中包含多条记录:

SELECT 
c.ProductId, 
COUNT(*) as NumberOfRecords,
(SELECT
 (ISNULL(NULLIF(c.Text, ''), 'FALSE'))) as TextFieldHasData
FROM dbo.Sales c
JOIN dbo.Sources s 
ON c.ProductId = s.ProductId
AND s.SourceStatusId in (1,2)
GROUP BY c.ProductId, c.Status, s.SourceStatusId, c.Text
ORDER BY c.ProductId

我需要调整查询的ISNULL部分,并且语法有问题;我实际上需要做的是首先检查NumberofRecords计数 - 如果给定结果记录的NumberofRecords计数大于1,则该记录的TextFieldHadData字段应该只说"N/A"。 但是,如果给定结果记录的NumberofRecords计数 = 1,则它应该检查c.Text字段是 NULL 还是空白。 如果 NULL 或 Blank,则TextFieldHasData字段将显示"FALSE"。如果它不是 NULL 或空白,则 TextFieldHasData 字段将显示"TRUE"。

查看您的代码,也许您正在寻找类似以下内容的内容(您将分组到 ProductId 级别(:

SELECT 
    c.ProductId
    , COUNT(*) as NumberOfRecords
    ,
        CASE
            WHEN COUNT(*) > 1
            THEN 'N/A'
            ELSE
                CASE
                    WHEN SUM(CASE WHEN ISNULL(c.Text, '') = '' THEN 0 ELSE 1 END) > 0
                    THEN 'TRUE'
                    ELSE 'FALSE'
                END
        END TextFieldHasData
FROM
    dbo.Sales c
    JOIN dbo.Sources s ON
        c.ProductId = s.ProductId
        AND s.SourceStatusId in (1, 2)
GROUP BY c.ProductId
ORDER BY c.ProductId

您可以使用以下查询:

我无法验证它,因为我没有这些表,但它应该可以工作,除非您发现轻微的语法错误。

这个想法是使用">当..."SQL函数

select v.productid,v.NumberOfRecords,
case
       when v.NumberOfRecords>1 then 'N/A'
       when v.NumberOfRecords=1 and isnull(v.TextFieldHasData,'') ='' then 'FALSE'
       else 'TRUE' end [textfieldhasdata]
 from(
SELECT 
c.ProductId, 
COUNT(*) as NumberOfRecords,
(SELECT
 (ISNULL(NULLIF(c.Text, ''), 'FALSE'))) as TextFieldHasData
FROM dbo.Sales c
JOIN dbo.Sources s 
ON c.ProductId = s.ProductId
AND s.SourceStatusId in (1,2)
GROUP BY c.ProductId, c.Status, s.SourceStatusId, c.Text) v
ORDER BY ProductId

最新更新