【问题标题】:How to show specific condition in column?如何在列中显示特定条件?
【发布时间】:2018-09-17 09:29:33
【问题描述】:

我有一个非常奇怪的需求,我有一个包含一些条件的查询。这是一个示例。

SELECT FirstName, LastName, ConditionalColumn FROM Employee
WHERE LastName != 'Ciaz'

我想在ConditionalColumn 中显示WHERE 条件列值。 所以该列将包含Ciaz

【问题讨论】:

  • 但是你知道条件,所以你可以写'Ciaz' AS ConditionalColumn。如果这是您并不总是知道条件的动态 SQL 方案的一部分,则必须将 WHERE 作为(转义!)字符串放入。 T-SQL 中没有可以将查询解析树的一部分复制到列中的功能,尽管使用SHOWPLAN 获取执行计划是一个bit
  • 请在您的问题中添加一些示例数据。
  • @JeroenMostert 这实际上是动态的,否则它会非常简单
  • 如果它是动态的,它仍然很简单,只要你控制机制。然而,如果您控制该机制,则基本上该死的几乎是不可能的——您不能在 SQL 方面做到这一点,至少不能作为查询执行本身的一部分。 WHERE 是如何构造的?更重要的是,你为什么需要这个?出于调试目的,SQL Profiler 或您的查询构建机制用于转储其查询的任何机制会更合适。
  • 然后您正在查看生成后解析WHERE 子句,这与您的原始问题完全不同。有两种方法:使用 T-SQL 解析器(如 TSqlParser 类)解析整个查询,或者接受这是一种糟糕的业务方式,并更改前端,使其单独通过其搜索条件,成为由后端翻译成查询。毕竟,这就是有后端的原因。

标签: sql-server


【解决方案1】:
Declare @Param Varchar(MAX) = 'Ciaz'
SELECT FirstName, LastName, @Param AS ConditionalColumn FROM Employee
WHERE LastName != @Param

第 1 行:声明一个 Varchar(字符串)变量 @Param 并赋值 'Ciaz'。 第 2 行:在 Select query with FirstName, LastName 中添加 @Param 和 'As' 关键字和列名 'ConditionalColumn',此 @Param 在查询中显示为列。

【讨论】:

    猜你喜欢
    • 2020-02-15
    • 2019-10-21
    • 1970-01-01
    • 2023-01-02
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多