0

奇妙なリクエストの一種ですが、外部結合を使用せずに、個別のTSQLクエリでデータを並べて表示することは可能ですか?私はこれを完全に複雑にしているのだろうかと思います...

これが私がやろうとしていることです:

レコードの数を取得する12のクエリがあり、それらを積み重ねるのではなく、テーブルにあるかのように右から左にレコードを表示したいと思います。

したがって、これらのクエリから:

SELECT COUNT(*) AS 'INTERNET JAN 12'
  FROM dbo.CONTACT AS AA
  JOIN dbo.Document AS BB
  ON AA.ACCOUNTNO = BB.ACCOUNTNO
 WHERE SOURCE IN ('INTERNET', 'EBAY', 'MSN', 'BING', 'GOOGLE', 'YAHOO')
   AND KEY1 = 'EA'
   AND MONTH(BB.Date) = 1
   AND  YEAR(BB.Date) = 2012

SELECT COUNT(*) AS 'INTERNET FEB 12'
  FROM dbo.CONTACT AS AA
  JOIN dbo.Document AS BB
  ON AA.ACCOUNTNO = BB.ACCOUNTNO
 WHERE SOURCE IN ('INTERNET', 'EBAY', 'MSN', 'BING', 'GOOGLE', 'YAHOO')
   AND KEY1 = 'EA'
   AND MONTH(BB.Date) = 2
   AND  YEAR(BB.Date) = 2012

 ...

SELECT COUNT(*) AS 'INTERNET DEC 12'
  FROM dbo.CONTACT AS AA
  JOIN dbo.Document AS BB
  ON AA.ACCOUNTNO = BB.ACCOUNTNO
 WHERE SOURCE IN ('INTERNET', 'EBAY', 'MSN', 'BING', 'GOOGLE', 'YAHOO')
   AND KEY1 = 'EA'
   AND MONTH(BB.Date) = 12
   AND  YEAR(BB.Date) = 2012 

結果セットを次のようにしたいと思います。

 INTERNET JAN 12     INTERNET FEB 12     ...     INTERNET DEC 12
 12                  25                          31

このような代わりに:

 INTERNET JAN 12
 12

 INTERNET FEB 12
 25

 ...

 INTERNET DEC 12
 31

これは、別のフィールドを追加して外部結合を行わなくても可能ですか?最終結果は、エンドユーザーが自動更新するためのクエリとしてこれをExcelスプレッドシートに含めることです。

4

1 に答える 1

1

SUMできるデータを作成するための中間結果セットとして一時テーブルを使用するのはどうですか?TSQLのフレーバーが最近のものであり、Microsoftのものである場合、CTEはそれを行います。

;
WITH temp (Jan12, Feb12, /* ... */ ) AS (
SELECT 
    -- Jan 12
    CASE MONTH(BB.Date)
        WHEN 1 THEN 1 
        ELSE 0 
    END,
    -- Feb 12
    CASE MONTH(BB.Date)
        WHEN 2 THEN 1 
        ELSE 0 
    END
  FROM dbo.CONTACT AS AA
  JOIN dbo.Document AS BB
  ON AA.ACCOUNTNO = BB.ACCOUNTNO
 WHERE SOURCE IN ('INTERNET', 'EBAY', 'MSN', 'BING', 'GOOGLE', 'YAHOO')
   AND KEY1 = 'EA'
   AND  YEAR(BB.Date) = 2012 
)
SELECT SUM(Jan12) AS [Internet Jan 12], SUM(Feb12) AS [Internet Feb 12] -- ... and so on

そうは言っても、あなたのケースの方がおそらく適してPIVOTいます。データベースにクエリを実行しないと、妥当なサンプルを作成できません。しかし、ドキュメントから簡単に理解できるはずです。

于 2012-05-15T16:50:19.063 に答える