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 没有,我不知道如何加入它们。

谢谢。

4

1 回答 1

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
于 2013-05-10T07:50:19.943 回答