【问题标题】:SQL add column based on if statementSQL根据if语句添加列
【发布时间】:2021-10-27 16:23:09
【问题描述】:

我有一个包含 4 个字符 (col1) 的表格,我想这样做:

  • 一分为二
  • 使用 if 语句将左侧 2 个字符重新编码为特定整数
  • concat left 到 rght(由 '.' 分隔)以生成下面的 fin 列。
col1 left rght fin
xx01 xx 01 01.1
xy01 xy 01 01.2
xz01 xz 01 01.3

有点 SQL 菜鸟所以感谢任何建议。谢谢!

【问题讨论】:

  • 小数点后需要在fin栏排序
  • 否 - 'left' 只有三个可能的值,所以只需要一个带有 3 个条件的 if。谢谢!!
  • 可以使用sql case statement.

标签: sql if-statement concatenation


【解决方案1】:

由于 col1 长度固定为 4 位,所以这里的一半表示 2 位。您可以对 col1 的全值或 LEFT(col1, 2) 进行 ORDER BY 操作。

-- SQL SERVER
SELECT col1, LEFT(col1, 2) "left"
     , RIGHT(col1, 2) "right"
     , RIGHT(col1, 2) + '.' + CAST((ROW_NUMBER() OVER (ORDER BY col1)) AS VARCHAR(2)) fin
FROM test

请查看网址https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=d76d9c504472f93ed3e4c53b88b94f57

使用 CASE 语句

SELECT col1, LEFT(col1, 2) "left"
     , RIGHT(col1, 2) "right"
     -- , RIGHT(col1, 2) + '.' + CAST((ROW_NUMBER() OVER (ORDER BY col1)) AS VARCHAR(2)) fin
     , RIGHT(col1, 2) + '.' + CASE LEFT(col1, 2) WHEN 'xx' THEN '1' WHEN 'xy' THEN '2' ELSE '3' END fin
FROM test

请查看网址https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=a1f10444fd50c9c1c541c49d8f23344f

【讨论】:

  • 谢谢,但有没有办法手动将 1、2 和 3 分配给“左”值?演员((行号不是我想要的行为(对不起,如果不清楚)。谢谢!
  • @littletimmy 请检查
  • 当 concat 两种不同类型(如 varchar 和 int)时需要 CAST。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 2020-02-21
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
相关资源
最近更新 更多