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

T-SQL-合并两个表而不创建临时表,sql,tsql,merge,Sql,Tsql,Merge,我有两个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'

我有两个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)已删除为日期类型的变量。现在是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

像图像这样的结果是什么意思?你不是简单地追求一个
联合所有的
MERGE
作为SQL中的一种操作,是非常不同的;这是一个“upsert”(一个
更新
插入
)。我忘了上传一个我想要达到的效果的图像。每个查询返回3列。日期、时间和金额。我想要一个像Date hour amount Date hour amount这样的结果作为一个单独的注释:考虑:在两个查询之间插入单词“UNION”或“UNION ALL”,并在第一个查询中消除顺序
UNION
将合并两个数据集,前提是所选值的类型相同并且#删除重复项
UNION ALL
不会删除重复项。如果您的行数相同,但未添加列
UNION
将合并这两个数据集。您是否询问如何并排合并两个不相关的行集?您可以向每个查询添加一列,然后使用
内部联接
匹配行。(或
outer join
,如果不能保证每个查询的行数相同。)