-3

私のクエリはゼロ行全体を表示していません。つまり、私の出力にはいくつかの行があり、その出力はすべての列の中でゼロです。その特定の行が出力に表示されませんでした。出力にゼロ行でも入れたい

私はこのような出力を得ています

    abc  1  2  3 
    def  4  5  6
    xyz  2  5  4
    mng  2  5  6

しかし、私が必要とした実際の出力は

    abc  1  2  3 
    def  4  5  6
    ghf  0  0  0
    xyz  2  5  4
    mng  2  5  6
    jkl  0  0  0

ゼロを含む行が削除されています。

私は2つのテーブル間の結合を使用しています..最初の列はグループごとに使用しています。残りの列は、..の合計の結果です。

出力にゼロが表示される理由は、セカンダリ テーブルにそれらの名前のデータがない..データが存在しない..しかし、列全体を見逃すのではなく、ゼロとして表示したいからです。

これが私が使用したクエリです.....

SELECT 
    [ASACCT].ACCT_MO_I as 'Types'
    ,sum(CASE when [TECH_V].[CLOS_T]='N4' THEN 1 ELSE 0 END) AS 'N4'
    ,SUM(CASE when [TECH_V].[CLOS_T]='N3' THEN 1 ELSE 0 END) AS 'N3'
    ,SUM(CASE when [TECH_V].[CLOS_T]='N2' THEN 1 ELSE 0 END) AS 'N2'
FROM [supt_oper_anls_dw].[dbo].[TECH_V] as [TECH_V]
LEFT OUTER JOIN [supt_oper_anls_dw].[dbo].ACCT_DATE_DIM AS [ASACCT] 
    ON CONVERT(varchar(10),[ASACCT].GREG_D, 101) = CONVERT(varchar(10), [TECH_V].[OPEN_TS], 101)
WHERE 
    [TECH_INCDT_V].[KGRP_I] ='73fd71ecf84f5080217683869fd819c3'
    and ((
            [ASACCT].ACCT_MO_I >(datepart(MONTH,getdate()))-1-6 
            and [ASACCT].ACCT_MO_I <=(datepart (MONTH,getdate()))-1 
            and [ASACCT].ACCT_YR_I = (datepart(year,getdate()))
        )
        or (
            [ASACCT].ACCT_MO_I>(datepart(MONTH,getdate()))-6-1+12 
            and [ASACCT].ACCT_YR_I = (datepart(year,getdate()))-1
        ))
    and [TECH_V].Notes like '%MFTFD%'
    and [TECH_V].notes like '%DEV%'
group by 
    [ASACCT].ACCT_MO_I,[ASACCT].ACCT_YR_I
4

2 に答える 2

0

これを試して

use left or right join
于 2013-03-17T18:42:28.463 に答える
0

LEFT JOINクエリで a を試してください。そうすればA LEFT JOIN B、からのすべてAが結果に含まれます。これを試して

create table #a_table 
( a int)
insert into #a_table
values
( 100),
( 200),
( 300),
( 400)

create table #b_table 
( b int)
insert into #b_table
values
( 100),
( 200),
( 300),
( 600),
( 700),
( 900)

--inner join
select * 
from   #a_table a
    inner join #b_table b
        on a.a = b.b

--left outer join   
select * 
from   #a_table a
       left outer join #b_table b
        on a.a = b.b

次に、クエリのさまざまな部分をコメントアウトして、スクリプトの他のセクションが返される内容を制限しているかどうかを確認してください。

ほとんどの句をコメントアウトすると、WHERE必要な行が結果セットに含まれると思います。

私の簡単な例では、次のWHERE節を追加できます....

select * 
from   #a_table a
       left outer join #b_table b
        on a.a = b.b
where b.b >10

...行が結果から削除されました。ISNULLしたがって、または関数の適用を開始する必要がありCOALESCEます...

select * 
from   #a_table a
       left outer join #b_table b
        on a.a = b.b
where ISNULL(b.b,11) >10
于 2013-03-17T21:23:54.143 に答える