SQL Server 2012:选择文字并与Where中的文字进行比较

时间:2015-05-06 01:27:01

标签: sql sql-server select literals

所以,基本上,在我的查询中,我希望有一个状态列,它将包含基于特定条件的一个或多个状态。用户应该能够过滤/搜索该列中的那些状态消息。我不确定语法是否能够实现这一点。

这会在我的列中选择0到2个状态div,我按原样显示。

从理论上讲,我想要发生什么:

Select fields, (select CASE WHEN root_directory IS NULL THEN '<div class="gray status">Unbuilt</div>' ELSE '' END + ' ' + (select top(1) CASE WHEN isnull(payment_received,0) = 1 THEN '' ELSE '<div class="red status">Unpaid</div>' END
FROM invoice C
WHERE C.id = B.id) as statuses
FROM table
WHERE statuses LIKE '%Unbuilt%'

关于如何在我的状态列中使用的想法?

感谢。

1 个答案:

答案 0 :(得分:0)

WHERE子句不能引用选择列表中的列。从逻辑上讲,在选择任何内容之前应用WHERE

但是,您可以根据设置statuses结果列的条件进行过滤。作为奖励,您将能够摆脱选择列表中的CASE个表达式之一,因为WHERE子句将解决以前适用的情况。

目前还不清楚原始表中的哪个表别名B适用,但table是唯一真正的候选者。假设B引用表table,那么沿着这些行的某些内容将会显示您想要的内容:

Select B.fields, '<div class="gray status">Unbuilt</div> '
  + CASE C.payment_received
     WHEN 1 THEN ''
     ELSE '<div class="red status">Unpaid</div>'
    END
FROM
  table B
  JOIN invoice C ON C.id = B.id
WHERE root_directory IS NULL