2013-05-10 62 views
1

我有以下2个查询:加入与另一查询的查询而使用共同的表表达式

查询1:

WITH JobTransactionsSumTypes AS 
(
SELECT 
     [Job], 
     [Cost_Code], 
     SUM(CASE WHEN [Transaction_Type] = 'AP cost' AND [Commitment] <>''  THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS APcostAmountComSum, 
     SUM(CASE WHEN [Transaction_Type] = 'AP cost' AND [Commitment] =''  THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS APcostAmountNonComSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Approved est changes'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS ApprovedEstChangesAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Aprvd cmmtt cst chng'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS AprvdCmmttCstChngAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Aprvd schdl val chn'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS AprvdSchdlValChnAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Cash receipt'     THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS CashReceiptAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Committed cost'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS CommittedCostAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Dollars paid'     THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS DollarsPaidAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'General Ledger only'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS GeneralLedgerOnlyAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'JC cost'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS JCcostAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Misc worksheet 1'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS MiscWorksheet1AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Misc worksheet 2'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS MiscWorksheet2AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Misc worksheet 3'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS MiscWorksheet3AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Misc worksheet 4'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS MiscWorksheet4AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Original estimate'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS OriginalEstimateAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Pending est changes'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PendingEstChangesAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Percent complete'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PercentCompleteAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Pndng cmmtt cst chng'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PndngCmmttCstChngAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Pndng schd val chg 2'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PndngSchdValChg2AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Pndng schd val chg 3'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PndngSchdValChg3AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Pndng schdl val chng'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PndngSchdlValChngAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'PR cost'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PRcostAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Receivable Adjstment'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS ReceivableAdjstmentAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Retention billed'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS RetentionBilledAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Scheduled value'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS ScheduledValueAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Work Billed'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS WorkBilledAmountSum 
    FROM [ADCData_Doric].[dbo].[JCT_CURRENT__TRANSACTION] 
    WHERE 
GROUP BY 
     [Job], 
     [Cost_Code] 
) 
SELECT 
    Job, 
    Cost_Code, 
    APcostAmountComSum, 
    APcostAmountNonComSum, 
    ApprovedEstChangesAmountSum, 
    AprvdCmmttCstChngAmountSum, 
    AprvdSchdlValChnAmountSum, 
    CashReceiptAmountSum, 
    CommittedCostAmountSum, 
    DollarsPaidAmountSum, 
    GeneralLedgerOnlyAmountSum, 
    JCcostAmountSum, 
    MiscWorksheet1AmountSum, 
    MiscWorksheet2AmountSum, 
    MiscWorksheet3AmountSum, 
    MiscWorksheet4AmountSum, 
    OriginalEstimateAmountSum, 
    PendingEstChangesAmountSum, 
    PercentCompleteAmountSum, 
    PndngCmmttCstChngAmountSum, 
    PndngSchdValChg2AmountSum, 
    PndngSchdValChg3AmountSum, 
    PndngSchdlValChngAmountSum, 
    PRcostAmountSum, 
    ReceivableAdjstmentAmountSum, 
    RetentionBilledAmountSum, 
    ScheduledValueAmountSum, 
    WorkBilledAmountSum, 
    (ScheduledValueAmountSum) AS StartContractAmount, 
    (AprvdSchdlValChnAmountSum) AS ApprovedVariations, 
    (OriginalEstimateAmountSum + ApprovedEstChangesAmountSum + PendingEstChangesAmountSum) AS TotalBudgetOriginalApprovedPending, 
    (OriginalEstimateAmountSum + ApprovedEstChangesAmountSum)*(MiscWorksheet1AmountSum/100)+(PendingEstChangesAmountSum*(MiscWorksheet2AmountSum/100)) AS TotalCommitmentsBudget, 
(CommittedCostAmountSum + AprvdCmmttCstChngAmountSum + PndngCmmttCstChngAmountSum) AS ApprovedPendingCommitedCosts 
    -- You Could Add additional Calculations here. 
FROM 
    [JobTransactionsSumTypes] 

问题2:

SELECT 
    APM_MASTER__DISTRIBUTION.Job 
    , APM_MASTER__DISTRIBUTION.Cost_Code 
    ,SUM(CASE WHEN APM_MASTER__DISTRIBUTION.Onhold_Status <>0    THEN JCT_CURRENT__TRANSACTION.Amount-JCT_CURRENT__TRANSACTION.Noncosted_Tax ELSE 0 END) AS OnHoldAmount 
    ,SUM(CASE WHEN APM_MASTER__DISTRIBUTION.Onhold_Status =0     THEN JCT_CURRENT__TRANSACTION.Amount-JCT_CURRENT__TRANSACTION.Noncosted_Tax ELSE 0 END) AS NotOnHoldAmount 
FROM 
    dbo.JCT_CURRENT__TRANSACTION JCT_CURRENT__TRANSACTION 
    LEFT OUTER JOIN dbo.APM_MASTER__DISTRIBUTION APM_MASTER__DISTRIBUTION 
    ON JCT_CURRENT__TRANSACTION.Vendor = APM_MASTER__DISTRIBUTION.Vendor AND JCT_CURRENT__TRANSACTION.Invoice = APM_MASTER__DISTRIBUTION.Invoice AND JCT_CURRENT__TRANSACTION.Dist_Sequence = APM_MASTER__DISTRIBUTION.Dist_Seq 
GROUP BY 
    APM_MASTER__DISTRIBUTION.Job 
, APM_MASTER__DISTRIBUTION.Cost_Code 

我可以加入这些在Crystal报表中,但希望通过左外部连接(获取所有查询1结果)并通过作业和成本代码链接到查询2来将其转换为单个查询。

我想我问的是,查询1使用公用表表达式,但查询2没有,我不知道如何加入它们。

谢谢。

回答

1

您可以在一个查询中使用多个CTE

简单的例子:

;WITH cte1 AS 
(
SELECT * 
FROM table1 
), AS cte2 
( 
SELECT * 
FROM table2 
) 
SELECT * 
FROM cte1 c1 LEFT JOIN cte2 c2 ON c1.id = c2.id 

你有多个CTE

;WITH JobTransactionsSumTypes AS 
(
SELECT 
     [Job], 
     [Cost_Code], 
     SUM(CASE WHEN [Transaction_Type] = 'AP cost' AND [Commitment] <>''  THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS APcostAmountComSum, 
     SUM(CASE WHEN [Transaction_Type] = 'AP cost' AND [Commitment] =''  THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS APcostAmountNonComSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Approved est changes'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS ApprovedEstChangesAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Aprvd cmmtt cst chng'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS AprvdCmmttCstChngAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Aprvd schdl val chn'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS AprvdSchdlValChnAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Cash receipt'     THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS CashReceiptAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Committed cost'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS CommittedCostAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Dollars paid'     THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS DollarsPaidAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'General Ledger only'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS GeneralLedgerOnlyAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'JC cost'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS JCcostAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Misc worksheet 1'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS MiscWorksheet1AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Misc worksheet 2'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS MiscWorksheet2AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Misc worksheet 3'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS MiscWorksheet3AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Misc worksheet 4'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS MiscWorksheet4AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Original estimate'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS OriginalEstimateAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Pending est changes'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PendingEstChangesAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Percent complete'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PercentCompleteAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Pndng cmmtt cst chng'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PndngCmmttCstChngAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Pndng schd val chg 2'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PndngSchdValChg2AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Pndng schd val chg 3'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PndngSchdValChg3AmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Pndng schdl val chng'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PndngSchdlValChngAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'PR cost'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS PRcostAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Receivable Adjstment'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS ReceivableAdjstmentAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Retention billed'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS RetentionBilledAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Scheduled value'   THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS ScheduledValueAmountSum, 
     SUM(CASE WHEN [Transaction_Type] = 'Work Billed'    THEN [Amount]-[Noncosted_Tax] ELSE 0 END) AS WorkBilledAmountSum 
    FROM [ADCData_Doric].[dbo].[JCT_CURRENT__TRANSACTION] 
    --WHERE your_condition 
GROUP BY 
     [Job], 
     [Cost_Code] 
), JobTransactionsSumTypes_Query2 AS 
(
SELECT 
    APM_MASTER__DISTRIBUTION.Job 
    , APM_MASTER__DISTRIBUTION.Cost_Code 
    ,SUM(CASE WHEN APM_MASTER__DISTRIBUTION.Onhold_Status <>0    THEN JCT_CURRENT__TRANSACTION.Amount-JCT_CURRENT__TRANSACTION.Noncosted_Tax ELSE 0 END) AS OnHoldAmount 
    ,SUM(CASE WHEN APM_MASTER__DISTRIBUTION.Onhold_Status =0     THEN JCT_CURRENT__TRANSACTION.Amount-JCT_CURRENT__TRANSACTION.Noncosted_Tax ELSE 0 END) AS NotOnHoldAmount 
FROM 
    dbo.JCT_CURRENT__TRANSACTION JCT_CURRENT__TRANSACTION 
    LEFT OUTER JOIN dbo.APM_MASTER__DISTRIBUTION APM_MASTER__DISTRIBUTION 
    ON JCT_CURRENT__TRANSACTION.Vendor = APM_MASTER__DISTRIBUTION.Vendor AND JCT_CURRENT__TRANSACTION.Invoice = APM_MASTER__DISTRIBUTION.Invoice AND JCT_CURRENT__TRANSACTION.Dist_Sequence = APM_MASTER__DISTRIBUTION.Dist_Seq 
GROUP BY 
    APM_MASTER__DISTRIBUTION.Job 
,APM_MASTER__DISTRIBUTION.Cost_Code 
) 
SELECT 
    Job, 
    Cost_Code, 
    APcostAmountComSum, 
    APcostAmountNonComSum, 
    ApprovedEstChangesAmountSum, 
    AprvdCmmttCstChngAmountSum, 
    AprvdSchdlValChnAmountSum, 
    CashReceiptAmountSum, 
    CommittedCostAmountSum, 
    DollarsPaidAmountSum, 
    GeneralLedgerOnlyAmountSum, 
    JCcostAmountSum, 
    MiscWorksheet1AmountSum, 
    MiscWorksheet2AmountSum, 
    MiscWorksheet3AmountSum, 
    MiscWorksheet4AmountSum, 
    OriginalEstimateAmountSum, 
    PendingEstChangesAmountSum, 
    PercentCompleteAmountSum, 
    PndngCmmttCstChngAmountSum, 
    PndngSchdValChg2AmountSum, 
    PndngSchdValChg3AmountSum, 
    PndngSchdlValChngAmountSum, 
    PRcostAmountSum, 
    ReceivableAdjstmentAmountSum, 
    RetentionBilledAmountSum, 
    ScheduledValueAmountSum, 
    WorkBilledAmountSum, 
    (ScheduledValueAmountSum) AS StartContractAmount, 
    (AprvdSchdlValChnAmountSum) AS ApprovedVariations, 
    (OriginalEstimateAmountSum + ApprovedEstChangesAmountSum + PendingEstChangesAmountSum) AS TotalBudgetOriginalApprovedPending, 
    (OriginalEstimateAmountSum + ApprovedEstChangesAmountSum)*(MiscWorksheet1AmountSum/100)+(PendingEstChangesAmountSum*(MiscWorksheet2AmountSum/100)) AS TotalCommitmentsBudget, 
(CommittedCostAmountSum + AprvdCmmttCstChngAmountSum + PndngCmmttCstChngAmountSum) AS ApprovedPendingCommitedCosts, 
    j2.OnHoldAmount, 
    j2.NotOnHoldAmount 
FROM 
    [JobTransactionsSumTypes] j1 LEFT OUTER JOIN JobTransactionsSumTypes_Query2 j2 
     ON j1.Job = j2.Job AND j1.Cost_Code = j2.Cost_Code 
查询