简体   繁体   English

T-SQL - 合并两个表而不创建临时表

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

The prefer result i want I have those 2 T-SQL queries:我想要的首选结果我有这 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

Individually, their results are correct.单独来看,他们的结果是正确的。 I want to create a result as shown in the screenshot.我想创建一个结果,如屏幕截图所示。

I tried to create a CTE, but that didn't work.我试图创建一个 CTE,但这没有用。 What is the proper way?什么是正确的方法?

Thank you!谢谢!

First, the query I think you're looking for is something like this.首先,我认为您正在寻找的查询是这样的。 The Friday date (@fecha) was removed to a variable of type DATE.星期五日期 (@fecha) 已被删除为 DATE 类型的变量。 Instead of 2 query, 1 for the week, and 1 for the particular Friday, it's now 1 query.现在是 1 个查询,而不是 2 个查询,1 个用于一周,1 个用于特定的星期五。 The friday sales are broken out using conditional aggregation into a new column called [FECHA_AMOUNT].使用条件聚合将周五的销售额分解为名为 [FECHA_AMOUNT] 的新列。 Note: this only works if the variable @fecha falls within the last 7 days.注意:这仅适用于变量 @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;

Finally, as note in the comments.最后,如评论中所述。 When converting it's always good to use lengths.转换时使用长度总是好的。 Also, the money data type is not considered ideal.此外,货币数据类型不被认为是理想的。 Fwiw Fwiw

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM