UNION连接两个结果并删除重复项,而UNION ALL不删除重复项.UNION还对最终输出进行排序.
我想要的是没有重复且没有排序的UNION ALL.那可能吗?
这样做的原因是我希望第一个查询的结果位于最终结果之上,而第二个查询位于底部.(并且每个分类就好像它们单独运行一样)
我在查询中遇到时间性能上的巨大差异,看起来连接(内部和左外部)在查询中出现的顺序会产生重大影响.连接的顺序是否存在一些"基本规则"?
它们都是更大查询的一部分.它们之间的区别在于左连接位于更快查询的最后.
查询慢:(> 10分钟)
SELECT [t0].[Ref], [t1].[Key], [t1].[Name],
(CASE
WHEN [t3].[test] IS NULL THEN CONVERT(NVarChar(250),@p0)
ELSE CONVERT(NVarChar(250),[t3].[Key])
END) AS [value],
(CASE
WHEN 0 = 1 THEN CONVERT(NVarChar(250),@p1)
ELSE CONVERT(NVarChar(250),[t4].[Key])
END) AS [value2]
FROM [dbo].[tblA] AS [t0]
INNER JOIN [dbo].[tblB] AS [t1] ON [t0].[RefB] = [t1].[Ref]
LEFT OUTER JOIN (
SELECT 1 AS [test], [t2].[Ref], [t2].[Key]
FROM [dbo].[tblC] AS [t2]
) AS [t3] ON [t0].[RefC] = ([t3].[Ref])
INNER JOIN [dbo].[tblD] AS [t4] ON [t0].[RefD] = ([t4].[Ref])
Run Code Online (Sandbox Code Playgroud)
查询速度更快:(~30秒)
SELECT [t0].[Ref], [t1].[Key], [t1].[Name], …Run Code Online (Sandbox Code Playgroud) 我得到了一个包含正数和负数的数字列的表格。如何找到 det 编号最接近于零的记录?
这个查询
SELECT MIN(ABS(dNumber))
FROM myTable
Run Code Online (Sandbox Code Playgroud)
返回 det 最小绝对值。但是我希望返回签名值。
所以如果 myTable 包含 2 条记录;第一个dNumber = 2000,第二个dNumber = -1000,我希望查询返回-1000,而不是1000。
编辑:忘了提到这必须在聚合函数中作为其与 GROUP BY 查询的一部分
SELECT Key1, Key2,
SUM(CASE WHEN /*condition1*/ THEN dNumber ELSE NULL END) AS 'Value1',
SUM(CASE WHEN /*condition2*/ THEN dNumber ELSE NULL END) AS 'Value2',
MIN(ABS(dNumber)...) AS 'ClosestToZeroAndSigned'
FROM myTable
/*joins*/
WHERE /*conditions*/
GROUP BY Key1, Key2
Run Code Online (Sandbox Code Playgroud) 我这里有一个小问题.我想从同一个表中加入两次,并按共同的值进行分组.
这是数据集(来自表格凭证):
Date (dd/mm/yyyy) Amount
--------------------------
01.01.2010 1.000
15.01.2010 2.000
01.03.2010 3.000
01.03.2010 4.000
01.05.2010 5.000
01.01.2011 1.000
01.02.2011 2.000
01.04.2011 3.000
15.04.2011 4.000
01.05.2011 5.000
Run Code Online (Sandbox Code Playgroud)
结果应该是这样的:
Month Amount 2010 Amount 2011
---------------------------------
1 3.000 1.000
2 2.000
3 7.000
4 7.000
5 5.000 5.000
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?