0

結果を 1 つのテーブルに結合するには、2 つの別々のテーブルでさまざまな結合/結合を実行する必要があります。最初に、私が持っているものと必要なものを共有し、次に現在機能していないソリューションを共有します。

私が持っているもの:

  • 各表は実行された操作のリストで構成され、各操作にはopPatient(すべての患者が複数の操作を行った)、opClassification(1、2、3、または 4)、、、、opDateが含まれopPriceます。

  • StartクエリのEnd日付。

必要なもの:

単一のテーブルを作成するには:

  • すべての個別のリストopPatients
  • 各患者について:
    • oppriceすべての操作の合計
    • 分類 4 の全操作の合計opPrice(分類 4 は のみtable2)
    • 全操作の合計数
    • 分類が 3 の操作の合計数
    • 分類が 2 の操作の合計数
  • 上記のすべてWHERE opDate >= @StartDate AND opDate <= EndDate

現在の解決策(明らかに機能していません)

  • startend日付を設定します (ここでエラーはありません)

    SET @StartDate = DATEADD(DAY, -(DATEPART(Day, @Date)-1), @Date);    
    SET @EndDate = DATEADD(DAY, -1, (DATEADD(MONTH, 1, @StartDate)));
    
    SELECT
       Operation = (SELECT DISTINCT operation FROM table1
                    UNION
                    SELECT DISTINCT operation FROM table2),
       TotalPrice = CAST(opPrice) AS MONEY),
       TotalOps = COUNT(*),
       opC4 = COUNT(CASE
                WHEN opClassification = 4 THEN 1 
                ELSE Null                                  
                END) 
                WHERE opDate <= @EndDate AND opDate >= @StartDate 
                FROM table2,            
       opC3 = COUNT (CASE WHEN opClassification = 3 THEN 1 ELSE Null END),
       opC2 = COUNT (CASE WHEN opClassification = 2 THEN 1 ELSE Null END)
     FROM 
        table1, table2
     WHERE 
         table1.opDate <= @EndDate AND table1.opDate >= @StartDate 
     ORDER BY 
         Operation
    

すべてのヘルプ、ヒント、およびポインターをいただければ幸いです。

ありがとう!!よろしくお願いします。

4

2 に答える 2

0

あなたの要件によると、これはあなたが必要としているもののようです。

SELECT opPatient
, SUM(CASE WHEN opClassification = 1 THEN 1 ELSE 0 END) opC1
, SUM(CASE WHEN opClassification = 2 THEN 1 ELSE 0 END) opC2
, SUM(CASE WHEN opClassification = 3 THEN 1 ELSE 0 END) opC3
, SUM(CASE WHEN opClassification = 4 THEN 1 ELSE 0 END) opC4
, SUM(opPrice) AS TotalPrice
FROM
(
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2
) AS NewTable
WHERE opDate >= @StartDate AND opDate <= @EndDate 
GROUP BY opPatient
于 2012-10-11T05:23:55.477 に答える
0
SET @StartDate = DATEADD(DAY, -(DATEPART(Day, @Date)-1), @Date);
SET @EndDate = DATEADD(DAY, -1, (DATEADD(MONTH, 1, @StartDate)));  

SELECT opPatient, 
    -- Totals
    COUNT(opPrice) AS OpsTotal, 
    SUM(opPrice) AS PriceTotal,
    SUM(CASE WHEN opDate >= @StartDate AND opDate <= EndDate THEN opPrice END) AS PriceThisMonth,
    -- Op 4
    SUM(CASE WHEN opClassification = 4 THEN 1 END) AS OpsOp4,
    SUM(CASE WHEN opClassification = 4 THEN opPrice END) AS PriceOp4,
    SUM(CASE WHEN opClassification = 4 AND opDate >= @StartDate AND opDate <= EndDate THEN opPrice END) AS Op4PriceThisMonth,
    -- Op 3
    SUM(CASE WHEN opClassification = 3 THEN 1 END) AS OpsOp4,
    SUM(CASE WHEN opClassification = 3 THEN opPrice END) AS PriceOp4,
    SUM(CASE WHEN opClassification = 3 AND opDate >= @StartDate AND opDate <= EndDate THEN opPrice END) AS Op4PriceThisMonth,
    -- Op 2
    SUM(CASE WHEN opClassification = 2 THEN 1 END) AS OpsOp4,
    SUM(CASE WHEN opClassification = 2 THEN opPrice END) AS PriceOp4,
    SUM(CASE WHEN opClassification = 2 AND opDate >= @StartDate AND opDate <= EndDate THEN opPrice END) AS Op4PriceThisMonth,

FROM (
    SELECT opPatient, opClassification, opDate, opPrice
    FROM Table1
    UNION ALL
    SELECT opPatient, opClassification, opDate, opPrice
    FROM Table1
)
GROUP BY opPatient
于 2012-10-11T23:17:55.473 に答える