Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果在2005年SSRS报告中未找到记录,如何获取和填充零“0”_Sql_Reporting Services - Fatal编程技术网

Sql 如果在2005年SSRS报告中未找到记录,如何获取和填充零“0”

Sql 如果在2005年SSRS报告中未找到记录,如何获取和填充零“0”,sql,reporting-services,Sql,Reporting Services,我使用SSRS报告根据类别获得结果,类别值更改为是、否、不符合,替换为1=是、2=否、3=不符合。 问题是 SELECT ( CASE WHEN A = '99' or B = '99' THEN 3 WHEN C + D >= 10 THEN 1 ELSE 2 END) as Category, SELECT ( CASE WHEN A = '99' or B = '99'

我使用SSRS报告根据类别获得结果,类别值更改为是、否、不符合,替换为1=是、2=否、3=不符合。 问题是

SELECT (
    CASE
        WHEN    A = '99' or B = '99'    THEN 3
        WHEN    C + D >= 10 THEN 1
        ELSE 2
    END) as Category,
SELECT (
    CASE
        WHEN    A = '99' or B = '99'    THEN 3
        WHEN    C + D >= 10 THEN 1
        ELSE 2
        END
       ) as Category, [Table A].*, [Table B].*
       FROM Table A inner join Table B on Table A.id = Table B.id
       WHERE
        (
            Condition and Field is not null
        ) 
结果是,

             N     %     N    %    N     % 
Not Met      10    11%   5    7%   45    20% 
Yes          4     5%    30   4%   8     6%
No           10    11%   5    7%   45    20% 
例如,如果找不到Not Met的结果,我希望这样的结果是零

             N     %     N    %    N     % 
Not Met      0     0%    0    0%   0     0% 
Yes          4     5%    30   4%   8     6%
No           10    11%   5    7%   45    20%
我在查询中尝试了左连接,但它会带来额外的记录。我有点卡住了,如果没有找到“是”、“否”或“未满足”的记录,我不知道如何获得零“0”结果。 我的问题是

SELECT (
    CASE
        WHEN    A = '99' or B = '99'    THEN 3
        WHEN    C + D >= 10 THEN 1
        ELSE 2
    END) as Category,
SELECT (
    CASE
        WHEN    A = '99' or B = '99'    THEN 3
        WHEN    C + D >= 10 THEN 1
        ELSE 2
        END
       ) as Category, [Table A].*, [Table B].*
       FROM Table A inner join Table B on Table A.id = Table B.id
       WHERE
        (
            Condition and Field is not null
        ) 
请帮助,因为这是我的最后一个项目,我被卡住了

谢谢

我的样本数据。。。 需要考虑的要点:

1以上是我的样本数据

2表A和B在ID上有内部联接,将产生结果

3根据上述选择条件填充类别,但问题是,*如果没有条件匹配,则不会填充类别,但我也希望填充缺少的类别。在本例中,它是1

我想要这样的东西

EXPECTED RESULT
======
category----------ID----------REFNO----------BGDATE----------SBRST----------xx
3-----------------1209----------23----------09/09/1900----------13----------XX
2-----------------3453----------12----------14/02/1978----------10----------XX
2-----------------3476----------56----------02/03/1980----------10----------XX
1-----------------0-------------0-----------NULL----------------0-----------NULL

另一个解决方案可能是,如果我创建另一个包含所有3个类别的表,然后使用RIGHT OUTER JOIN来获得结果,但我不知道怎么做???

我曾经遇到过这个问题。我做了一个快速修复,创建一个临时表并将结果插入临时表,然后检查临时表中是否缺少三个类别中的任何一个,然后在临时表中插入一行,其中包含所需的默认值。下面是一个示例代码,只是给你一个想法

SELECT (
    CASE
        WHEN    A = '99' or B = '99'    THEN 3
        WHEN    C + D >= 10 THEN 1
        ELSE 2
        END
       ) as Category, [Table A].*
       INTO #Temp
       FROM [Table A]

IF NOT EXISTS (SELECT 1 FROM #Temp WHERE Category=1)
BEGIN
    INSERT INTO #Temp (Category,column1,column2,column3,etc...) VALUES ( 1,0,0,0,etc...
    )
END
IF NOT EXISTS (SELECT 1 FROM #Temp WHERE Category=2)
BEGIN
    INSERT INTO #Temp (Category,column1,column2,column3,etc...) VALUES ( 2,0,0,0,etc...
    )
END
IF NOT EXISTS (SELECT 1 FROM #Temp WHERE Category=3)
BEGIN
    INSERT INTO #Temp (Category,column1,column2,column3,etc...) VALUES ( 3,0,0,0,etc...
    )
END

SELECT * FROM #Temp 

DROP TABLE #temp

您可以使用类似以下内容的查询:

select cat.Category
  , a.ID
  , b.CITY
  , a.BGDATE
  , a.REFNO
  , a.SBRST
from
  (
    select Category = 1
    union all
    select Category = 2
    union all
    select Category = 3
  ) cat
  left join
  (
    [Table - A] a
      inner join [Table - B] b on a.ID = b.ID
      cross apply
      (
        SELECT Category = CASE WHEN a.BGDATE = '09/09/1900' THEN 3
          WHEN a.SBRST IN ('11','12') THEN 1
          ELSE 2
          END
      ) c
  ) on c.Category = cat.Category
order by Category desc
我已经创建了一个示例,它显示了所需的结果


需要注意的关键点是,我正在使用子查询创建所需的类别cat子查询,然后使用左连接将其连接到实际结果-这确保始终包含所有所需的类别。

感谢Kamran的回复,Kamran感谢您的回复。.我喜欢您的想法,但请您进一步解释一下如何动态创建表,因为每个报表的字段都不同,并且只涉及2个表1是主表,2是根据用户角色包含权限。其次,我的用户只有浏览/查看权限,他们是否可以创建表,因为报表也有安全因素。请告诉我在哪里添加CREATE和DROP命令。您好,您可以动态处理列名,以便列根据表定义增长。您可以通过sys.tables找到列名,如下所示:从sys.columns a中选择a.collation\u name,其中a.object\u id=object\u name“在此处输入表名”。由于您将使用SELECTINTO命令,所以不使用create语句,并且应该在返回所需结果之后进行删除。我希望这有助于Shi Kamran,我已经完成了一半,如果我在一张表(即表A)上实施这个想法,我会得到结果,但我有另一个表,即表B。表B有一些与表A相同的字段。结果也来自表B的内部联接。请给出如何将您的上述想法与表B联接的建议。有关更多详细信息,请参阅我发布的第一个问题。非常感谢。当我将表A、表B的结果插入Temp时,我得到了以下错误,因为表B有两个与表A字段相同的字段。错误:每个表中的Msg 2705,16级,状态3,第1行列名必须唯一。表“Temp”中的列名“ID”被多次指定。您能发布表A和表B中的原始数据吗?谢谢您的回复。我将尝试我的查询和实际数据,并让你很快知道。嗨,伊恩,谢谢你的绝妙想法。在对真实数据应用查询后,我将获得所有类别,即1、2、3,但包含所有额外记录。所以我添加了WHERE条件,这是实际查询的一部分,现在我再次得到的是真正的条件类别。这意味着再次没有丢失的类别。我在order by category desc命令之前添加了WHERE条件。如果你能帮我解开这个谜,我将不胜感激。谢谢,请在注释中用您的名字查看原始查询的上方的my WHERE子句。
select cat.Category
  , a.ID
  , b.CITY
  , a.BGDATE
  , a.REFNO
  , a.SBRST
from
  (
    select Category = 1
    union all
    select Category = 2
    union all
    select Category = 3
  ) cat
  left join
  (
    [Table - A] a
      inner join [Table - B] b on a.ID = b.ID
      cross apply
      (
        SELECT Category = CASE WHEN a.BGDATE = '09/09/1900' THEN 3
          WHEN a.SBRST IN ('11','12') THEN 1
          ELSE 2
          END
      ) c
  ) on c.Category = cat.Category
order by Category desc