【问题标题】:one Column with multiple where conditions具有多个 where 条件的一列
【发布时间】:2017-07-25 05:30:54
【问题描述】:

我可以对以下多个条件使用 Case 语句吗?输出应该是一列,其中所有以下条件都应为真。如果它为真,则打印'X'否则为NULL。我正在使用 SQL 服务器,但不确定如何使用 Case 语句来实现。

WHERE 
(
    (D.Type = 'abc') 
    AND D.Status = 'C'
) 
AND 
(
    (
    AAD.D01 IS NOT NULL 
    OR AAD.D02 IS NOT NULL 
    OR AAD.D03 IS NOT NULL 
    OR AAD.D04 IS NOT NULL 
    OR AAD.D05 IS NOT NULL 
    OR AAD.D06 IS NOT NULL 
    OR AAD.D07 IS NOT NULL 
    OR AAD.D08 IS NOT NULL
    ) 
AND (AAD.B05 = 1) 
OR (AAD.B06 = 1)
)
 THEN 'X', ELSE '' END AS [Adjusted]

【问题讨论】:

  • ...您的实际问题是什么?这个WHERE 子句有问题吗?
  • 请不要发布部分查询。
  • 发布完整代码错误太多了。逻辑错误是因为缺少Parenthesis

标签: sql case conditional-statements


【解决方案1】:

可能你需要EXISTS,可以在CASE子句中使用。

有一个很简单的例子:

DECLARE @table1 TABLE (Id int)
INSERT INTO @table1 VALUES (1), (2), (6), (10)
SELECT CASE 
         WHEN EXISTS(SELECT * 
                     FROM @table1 
                     WHERE Id = 1 OR Id = 2) 
       THEN 'X' ELSE '' END AS [Adjusted]

替换

SELECT * 
   FROM @table1 
   WHERE Id = 1 OR Id = 2

用你的实际陈述。如果这不是您想要做的,请更新您的问题并提供完整的代码和更多信息。

【讨论】:

  • 我不知道我们可以在案例语句中使用 Exists 很高兴知道谢谢,我会尝试这种方法,看看它是否有效。
  • Exists inside Case 是我所需要的,它就像一个魅力。谢谢六斗:)
【解决方案2】:

我会建议 linq 您需要一个可以保存数据的集合

    var datalist = db.Table.Where(d=>d.Type == 'abc').Where(d=>d.Status=='C').Where(AAD=>AAD.D01 != null)......

【讨论】:

  • 这个问题是针对 SQL 而不是 C# with Linq
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 2019-08-25
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多