0

これがSQL2008ビューでの私のステートメントです。

SELECT TOP (100) PERCENT
    dbo.[Billing Detail].Chart
,   dbo.[Billing Detail].[Transaction Code]
,   SUM(dbo.[Billing Detail].Units) AS [Total Billed]
FROM
    dbo.[Billing Detail]
    INNER JOIN dbo.Patient
    ON dbo.[Billing Detail].Chart = dbo.Patient.[Chart Number]
WHERE
    (dbo.[Billing Detail].[Transaction Code] = 'H2016')
    AND (dbo.[Billing Detail].[Service Date 1] BETWEEN '2013-1-01 00:00:00.000'
                                               AND     '2013-1-31 00:00:000')
GROUP BY
    dbo.[Billing Detail].Chart
,   dbo.[Billing Detail].[Transaction Code]
ORDER BY
    dbo.[Billing Detail].Chart

1-1-13から1-31-13までの単位の合計がJANであり、2-1-13から2-28-13までのすべての日付が2月であるIFステートメントを作成しようとしています...そして今年の残りの期間も同様です。次に、この情報をAccess2010またはExcell2010にエクスポートする必要があります。

4

3 に答える 3

2

これがあなたの見方がどうあるべきかと私が思うものです。最後の2つのWHERE句は、2013年のみを処理するようにビューをハードコーディングすることを前提としています(これが、使用すべきでない理由ですBETWEEN)。ビューを任意の年に使用できるようにする場合は、これらの2つの句を削除し、ビューから選択するときにそれらを適用します(と同じようにORDER BY)。

SELECT
  [month] = DATEADD(MONTH, DATEDIFF(MONTH, 0, bd.[Service Date 1]), 0),
  bd.Chart,
  bd.[Transaction Code], 
  SUM(bd.Units) AS [Total Billed]
FROM
  dbo.[Billing Detail] AS bd
INNER JOIN
  dbo.Patient AS p
  ON bd.Chart = p.[Chart Number]
WHERE
  bd.[Transaction Code] = 'H2016'
  AND bd.[Service Date 1] >= '20130101'
  AND bd.[Service Date 1] < '20140101'
GROUP BY 
  DATEADD(MONTH, DATEDIFF(MONTH, 0, bd.[Service Date 1]), 0);

これで、このデータをExcelまたはAccessに取り込むことができます。1回限りのタスクの場合、Excelは結果をグリッドにインポートしたり、結果をファイル出力にインポートしたりすることができます。自動化する必要がある場合は、どちらかにリンクされたサーバーを試すことができますが、Accessのビューにリンクするか、外部アプリケーション(C#コマンドライン、PowerShellなど)を使用するなど、別の角度からアプローチする方がよい場合があります。結果を読み取り、必要なファイル形式で出力します(データによっては、通常、.CSVが最も簡単です)。

于 2013-01-25T16:53:52.437 に答える
0

これが私がすることです:

  1. カバーしたい日付範囲全体をカバーし、年と月 (または 1 年のみをカバーする場合は月のみ) で単位をグループ化する、あなたが持っているものと同様のクエリを作成します。

  2. データを Access または Excel にエクスポートします。ODBC を介して Access をデータベース テーブルに接続できます。Excel で同様のことを行うことも、SSMS を使用してクエリ結果を CSV ファイルにエクスポートし、選択したツールにインポートすることもできます。(SSIS はさらに優れていますが、それがなくても、これは実行できます。)

  3. Access または Excel を使用して、Month フィールドのデータを希望するレイアウトにピボットします。

SQL で PIVOT キーワードを使用して各月の列を取得できますが、多くの入力を行う必要があり、ウィザード形式のガイダンスは得られません。Access または Excel には、ピボット テーブルを設定し、集計行や小計などを微調整するための使いやすいインターフェイスがあります。

于 2013-01-25T16:41:23.493 に答える
0

私があなたの質問を正しく理解していれば、月ごとに列を追加してから、それらの日付範囲の単位を合計したいですか?

そう仮定すると、このようなものがうまくいくかもしれません (私はあなたのテーブル構造を単純化しましたが、これは正しい方向に進むはずです):

SELECT ID, Month, SUM(Units)
FROM (
SELECT  ID, Units, 
    CASE 
       WHEN Month(dt) = 1 THEN 'Jan'
       WHEN Month(dt) = 2 THEN 'Feb'
       WHEN Month(dt) = 3 THEN 'Mar'
    END as Month
FROM         Sample
) t
GROUP BY ID, Month

そしてSQLフィドル

- 編集

実際には、希望する結果によっては、CASE ステートメントの代わりに WHERE 条件に年を含めるのが最善の場合があります。本当にあなたのデータに依存します...

SELECT ID, Month, SUM(Units)
FROM (
SELECT  ID, Units, 
    CASE 
       WHEN Month(dt) = 1 THEN 'Jan'
       WHEN Month(dt) = 2 THEN 'Feb'
       WHEN Month(dt) = 3 THEN 'Mar'
    END as Month
FROM         Sample
WHERE Year(dt) = 2013
) t
GROUP BY ID, Month
于 2013-01-25T16:44:06.227 に答える