小编hig*_*tow的帖子

Sql Union All*with*"distinct"

UNION连接两个结果并删除重复项,而UNION ALL不删除重复项.UNION还对最终输出进行排序.

我想要的是没有重复且没有排序的UNION ALL.那可能吗?

这样做的原因是我希望第一个查询的结果位于最终结果之上,而第二个查询位于底部.(并且每个分类就好像它们单独运行一样)

sql union distinct union-all

36
推荐指数
2
解决办法
12万
查看次数

联接顺序如何影响查询的性能

我在查询中遇到时间性能上的巨大差异,看起来连接(内部和左外部)在查询中出现的顺序会产生重大影响.连接的顺序是否存在一些"基本规则"?

它们都是更大查询的一部分.它们之间的区别在于左连接位于更快查询的最后.

查询慢:(> 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)

sql linq sql-server join

6
推荐指数
1
解决办法
9531
查看次数

如何返回最接近零的值

我得到了一个包含正数和负数的数字列的表格。如何找到 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)

sql-server

3
推荐指数
1
解决办法
971
查看次数

如何从同一个表加入两次.按同一列分组

我这里有一个小问题.我想从同一个表中加入两次,并按共同的值进行分组.
这是数据集(来自表格凭证):

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)

我该如何解决这个问题?

sql sql-server-2008

-1
推荐指数
1
解决办法
769
查看次数

标签 统计

sql ×3

sql-server ×2

distinct ×1

join ×1

linq ×1

sql-server-2008 ×1

union ×1

union-all ×1