2012-03-12 22 views
2

以下の2つのクエリは、それぞれ1行のデータを生成します。2つのクエリを水平方向に結合する

私はLEFTのように1つのデータ行だけを組み合わせる最良の方法は何ですか?これらの2つのDISTINCTdatabasesFROMを来ている

の名前:[ASN01]と[dsi_ASN_dsicx]

私はこのようなデータベースの70ペアを持っていますが、簡単にするために一つだけを示しています。

3文字の頭字語ASNが両方のデータベース名に共通するという事実は間違いではなく、必要であれば解決の一部となります。

現在の結果:

サイト、Elligence(ヘッダ) ASN、100.00

サイト、GP_Total(ヘッダ) ASN、120.00

所望の結果:

サイト、GP_Total、 Elligence(ヘッダー) ASN、120.00、100.00

SELECT 'ASN' AS Site , 
     CASE SUM(perdblnc) 
      WHEN NULL THEN 0 
      ELSE -1 * SUM(PERDBLNC) 
     END AS GP_Total 
FROM [ASN01].[dbo].[GL10110] T1 
     LEFT OUTER JOIN [ASN01].[dbo].[GL00105] T2 ON [T1].[ACTINDX] = [T2].[ACTINDX] 
WHERE YEAR1 = 2012 
     AND PERIODID IN ('2') 
     AND ACTNUMST IN ('4200-0000-C', '6940-0000-C', '6945-0000-C', 
          '6950-0000-C') 

SELECT 'ASN' AS [Site] , 
     SUM(pi.amount) AS [Elligence] 
FROM [dsi_ASN_dsicx].dbo.charge c 
     LEFT JOIN [dsi_ASN_dsicx].dbo.paymentitem pi ON c.idcharge = pi.chargeid 
     LEFT JOIN [dsi_ASN_dsicx].dbo.payment p ON pi.paymentid = p.idpayment 
     LEFT JOIN [dsi_ASN_dsicx].dbo.paymenttype pt ON p.paymenttypeid = pt.idpaymenttype 
WHERE pi.amount != 0 
     AND pt.paymentmethod NOT IN ('5', '7') 
     AND pt.paymentmethod IS NOT NULL 
     AND p.sdate >= '20120201' 
     AND p.sdate <= '20120229' 
+0

これは、2つの異なるデータセットのようです。共通の行を定義するものは何ですか?これらのクエリでも同じ数の行が生成されますか? – Paparazzi

+0

それはポストでは、彼は各クエリ@Blamから1つの行だけを取得すると言います。彼は彼らが1つの列に加わりたいと思う。本当に異なる質問に答えるためには+1 – ImGreg

答えて

5

あなたのクエリを通過して変更するのは最も簡単な方法は、"WITH" common_table_expressionを使用して一時テーブルを使用することです。表1と表2は、select文から作成された一時表です。したがって、table1を選択してtable2を結合します。

文法上の問題がある場合は、私は現在これをテストするものはありません。

;With Table1 as (SELECT 'ASN' as Site, Case sum(perdblnc) 
WHEN NULL THEN 0 
ELSE -1*sum(PERDBLNC) END as GP_Total 
FROM [ASN01].[dbo].[GL10110] T1 
Left Outer Join [ASN01].[dbo].[GL00105] T2 
ON [T1]. [ACTINDX]= [T2]. [ACTINDX] 
WHERE YEAR1 = 2012 
AND PERIODID in ('2') 
AND ACTNUMST in ('4200-0000-C', '6940-0000-C', '6945-0000-C', '6950-0000-C')) 

, Table2 as (SELECT 
    'ASN' as [Site], 
    SUM(pi.amount) as [Elligence] 
FROM [dsi_ASN_dsicx].dbo.charge c 
    LEFT JOIN [dsi_ASN_dsicx].dbo.paymentitem pi on c.idcharge = pi.chargeid 
    LEFT JOIN [dsi_ASN_dsicx].dbo.payment p on pi.paymentid = p.idpayment 
    LEFT JOIN [dsi_ASN_dsicx].dbo.paymenttype pt on p.paymenttypeid = pt.idpaymenttype 
WHERE pi.amount != 0 
AND pt.paymentmethod not in ('5','7') 
AND pt.paymentmethod is not null 
AND p.sdate >='20120201' and p.sdate <= '20120229') 

SELECT * FROM Table1 
LEFT JOIN Table2 ON Table1.site = Table2.site 

それが=の場合の回答として)

+1

+1。私は多分それが完全な協会でなければならないと考えていた、どちらかが潜在的に不在だったかどうかは分からなかった。最後の結合でON句を必要としないでください(ON Table1.site = Table2.site)? –

+0

ありがとう@LevinMagruder。私はON句を含むように編集します。 – ImGreg

+1

このソリューションは問題なく完璧に機能しました!構文はMS SSMSには完璧でした。助けが大変ありがとうございます。 – MSS

関連する問題