簡體   English   中英

T-SQL - 合並兩個表而不創建臨時表

[英]T-SQL - Merge two tables without create temp table

我想要的首選結果我有這 2 個 T-SQL 查詢:

SELECT 
    CONVERT(NVARCHAR, AL.FECHA, 103) AS [DATE], 
    CONVERT(NVARCHAR, AL.HORA, 108) AS [HOUR], 
    SUM(CAST(AL.TOTALNETO AS money)) AS [AMOUNT]
FROM
    ALBVENTACAB AL
WHERE 
    CONVERT(NVARCHAR, AL.FECHA, 103) = '10/09/2020' 
    -- AND CONVERT(nvarchar, GETDATE(), 103) AND
    AND CONVERT(nvarchar, AL.HORA, 108) BETWEEN (SELECT CONVERT(nvarchar, AL.HORA, 108)) AND CONVERT(nvarchar, GETDATE(), 108)
GROUP BY 
    AL.FECHA, AL.HORA
ORDER BY 
    AL.FECHA

SELECT 
    CONVERT(NVARCHAR, AL.FECHA, 103) AS [DATE], 
    CONVERT(NVARCHAR, AL.HORA, 108) AS [HOUR], 
    SUM(CAST(AL.TOTALNETO AS money)) AS [AMOUNT]
FROM 
    ALBVENTACAB AL
WHERE 
    FECHA = CAST(DATEADD(DD, -7, GETDATE()) AS date) 
    AND CONVERT(nvarchar, AL.HORA, 108) BETWEEN (SELECT CONVERT(nvarchar, AL.HORA, 108)) AND CONVERT(nvarchar, GETDATE(), 108)
GROUP BY 
    AL.FECHA, AL.HORA
ORDER BY 
    AL.FECHA

單獨來看,他們的結果是正確的。 我想創建一個結果,如屏幕截圖所示。

我試圖創建一個 CTE,但這沒有用。 什么是正確的方法?

謝謝!

首先,我認為您正在尋找的查詢是這樣的。 星期五日期 (@fecha) 已被刪除為 DATE 類型的變量。 現在是 1 個查詢,而不是 2 個查詢,1 個用於一周,1 個用於特定的星期五。 使用條件聚合將周五的銷售額分解為名為 [FECHA_AMOUNT] 的新列。 注意:這僅適用於變量 @fecha 在過去 7 天內的情況。

declare @fecha          date='20201009';

SELECT 
    CONVERT(NVARCHAR, AL.FECHA, 103) AS [DATE], 
    CONVERT(NVARCHAR, AL.HORA, 108) AS [HOUR], 
    SUM(CAST(AL.TOTALNETO AS money)) AS [AMOUNT],
    SUM(case when cast(AL.FECHA as date)=@fecha then CAST(AL.TOTALNETO AS money) 
             else cast(0 as money) end) AS [FECHA_AMOUNT]
FROM 
    ALBVENTACAB AL
WHERE 
    FECHA = CAST(DATEADD(DD, -7, GETDATE()) AS date) 
    AND CONVERT(nvarchar, AL.HORA, 108) BETWEEN (SELECT CONVERT(nvarchar, AL.HORA, 108)) 
    AND CONVERT(nvarchar, GETDATE(), 108)
GROUP BY 
    AL.FECHA, AL.HORA
ORDER BY 
    AL.FECHA;

最后,如評論中所述。 轉換時使用長度總是好的。 此外,貨幣數據類型不被認為是理想的。 Fwiw

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM