相关疑难解决方法(0)

即使第一个参数不为 NULL,SQL Server 是否会读取所有 COALESCE 函数?

我正在使用 T-SQLCOALESCE函数,其中第一个参数在大约 95% 的运行时间不会为空。如果第一个参数是NULL,第二个参数是一个相当漫长的过程:

SELECT COALESCE(c.FirstName
                ,(SELECT TOP 1 b.FirstName
                  FROM TableA a 
                  JOIN TableB b ON .....)
                )
Run Code Online (Sandbox Code Playgroud)

例如,如果 ,c.FirstName = 'John'SQL Server 仍会运行子查询吗?

我知道使用 VB.NETIIF()函数,如果第二个参数为 True,代码仍会读取第三个参数(即使不会使用它)。

null sql-server coalesce

102
推荐指数
6
解决办法
2万
查看次数

条件中的逻辑运算符 OR AND 和 WHERE 中的条件顺序

让我们检查这两个语句:

IF (CONDITION 1) OR (CONDITION 2)
...

IF (CONDITION 3) AND (CONDITION 4)
...
Run Code Online (Sandbox Code Playgroud)

如果CONDITION 1TRUE,会CONDITION 2被检查吗?
如果CONDITION 3FALSE,会CONDITION 4被检查吗?

条件如何WHERE:SQL Server 引擎是否优化WHERE子句中的所有条件?程序员是否应该以正确的顺序放置条件以确保 SQL Server 优化器以正确的方式解析它?

添加:

感谢 Jack 提供链接,来自 t-sql 代码的惊喜:

IF  1/0 = 1 OR 1 = 1
      SELECT 'True' AS result
ELSE
      SELECT 'False' AS result


IF  1/0 = 1 AND 1 = 0
      SELECT 'True' …
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 sql-server optimization t-sql condition

38
推荐指数
2
解决办法
14万
查看次数

SQL Server 无法“识别”COUNT 的别名

我已经使用 SQL Server 从备份文件恢复了 Northwind 数据库(https://northwinddatabase.codeplex.com/)。

尝试执行以下查询会导致错误“无效的列名 'products'。”,product 是别名。

SELECT OrderID, COUNT(ProductID) products
FROM [NORTHWND].[dbo].[OrderDetails]
GROUP BY OrderID
HAVING products > 5;
Run Code Online (Sandbox Code Playgroud)

问题是什么?

sql-server

6
推荐指数
2
解决办法
7640
查看次数

为什么我需要使用子查询来过滤分组选择?

如果我这样做——

SELECT dv.Name
      ,MAX(hb.[DateEntered]) as DE
FROM 
    [Devices] as dv
    INNER JOIN 
    [Heartbeats] as hb ON hb.DeviceID = dv.ID
WHERE DE < '2013-03-04'
GROUP BY dv.Name
Run Code Online (Sandbox Code Playgroud)

我收到这个错误——

消息 207,级别 16,状态 1,第 17 行 列名“DE”无效。

如果我这样做——

SELECT Name, DE FROM (
    SELECT dv.Name
          ,MAX(hb.[DateEntered]) as DE
    FROM 
        [Devices] as dv
        INNER JOIN 
        [Heartbeats] as hb ON hb.DeviceID = dv.ID
    GROUP BY dv.Name
) as tmp WHERE tmp.DE < '2013-03-04'
Run Code Online (Sandbox Code Playgroud)

它按预期工作。

有人可以解释为什么我需要将主查询嵌套为子查询来限制我的数据集吗?

另外,这里是否有更好的方法来实现目标?从一张表中检索所有记录,以及按[DateEntered]降序排列的单个“顶部”相关记录?

sql-server-2008 sql-server t-sql subquery

4
推荐指数
1
解决办法
4118
查看次数

CASE语句问题

任何人都可以帮助解决这个错误吗?

SQL:

SELECT 
    InvoiceDate, 
    BillingAddress, 
    BillingCity, 
    Total,

    CASE
      WHEN Total < 2.00 THEN 'Baseline Purchase'
      WHEN Total BETWEEN 2.00 AND 6.99 THEN 'Low Purchase'
      WHEN Total BETWEEN 7.00 AND 15.00 THEN 'Target Purchase'
      ELSE 'Top Performer'
    END AS PurchaseType

FROM 
    invoices
WHERE
  PurchaseType = 'Top Performer'
ORDER BY 
  BillingCity
Run Code Online (Sandbox Code Playgroud)

错误:消息 207,级别 16,状态 1,第 13 行列名称“PurchaseType”无效。

sql-server case

0
推荐指数
1
解决办法
644
查看次数