【问题标题】:SQL query: create category column based on a varchar column in table containing specific valuesSQL查询:根据包含特定值的表中的varchar列创建类别列
【发布时间】:2013-04-25 09:09:05
【问题描述】:

我有一个类似于以下的表格:

Date        Description     Value1  Value2  
01/01/2012  shiny colour    2       0       
01/01/2012  yellow colour   2       2       
03/01/2012  matt colour     2       2       
03/01/2012  matt            4       1   
03/01/2012  shiny           2       2   

我想编写一个 SELECT SQL 查询 (T-SQL),它将输出上述所有列,但还会显示一个额外的列作为 SELECT 语句的输出,其值取决于单词“color”的存在描述(如果存在“颜色”,则为一个值,否则显示不同的值)。

(我还想在其顶部显示另一个额外的列,其值取决于描述列中是否存在“matt”或“shiny”。但我认为这样做的方法是相似的) .

我相信我应该能够使用 COALESCE 函数来做到这一点,但我对此并不熟悉,并且正在努力让任何工作正常工作?

扩展

您好,谢谢您的回答。他们真的很有帮助。我对这个问题还有一个扩展。我的第二个生成列依赖于第一个生成列中的信息。所以像:

SELECT *,
CASE 
    WHEN Description LIKE '%colour%' THEN 'SomeValue'
    ELSE 'Unclassified'
END AS Category1,
CASE
    WHEN AnotherColumn LIKE 'Something' THEN 'SomeValue'
    WHEN Category1='Unclassified' THEN 'Unclassified'
    ELSE 'Generic'
END AS Category2
FROM table_name

如何让 Category2 的输出依赖于 Category1 的输出?我正在尝试类似上述的方法,但它不起作用。

我的扩展问题在这里得到了解答: T-SQL CASE statement relies on another CASE statement in same SELECT query

【问题讨论】:

    标签: sql sql-server tsql case


    【解决方案1】:
    SELECT *,
           CASE WHEN Description LIKE '%colour%' THEN
                1
           ELSE
                0
           END AS HasColour,
           CASE WHEN Description LIKE '%matt%' THEN
                1
           ELSE
                0
           END AS HasMatt,
           CASE WHEN Description LIKE '%shiny%' THEN
                1
           ELSE
                0
           END AS HasShiny
    FROM   table_name
    

    您只需为要搜索的所有不同单词添加更多列。显然,您可以将列的返回类型更改为您想要的任何类型,但我认为布尔值适合这种情况。

    【讨论】:

      【解决方案2】:

      除非我误解了您的要求,否则您可以使用 case 语句:

      SELECT Date,  
      Description, 
      Value1, 
      Value2, 
      Case when Description like '%colour%' then OTHERCOL else OTHERCOL2 end as Colourful,
      Case when Description like '%matt%' then OTHERCOL else OTHERCOL2 end as Matt,
      Case when Description like '%shiny%' then OTHERCOL else OTHERCOL2 end as Shiny, 
      FROM yourTable
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-17
        • 2017-05-07
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多