在我们的SQL-DB中,我们的四个限制存储为单独的行 我希望将限制恢复为单行,将四个限制作为列 数据如下所示:
TABLE A
lsequence operator1 value1 operator2 value2
1 < 10.5 {NULL} {NULL}
2 >= 11.5 <= 12.5
3 >= 10.5 <= 13.5
4 > 13.5 {NULL} {NULL}
TABLE B
lsequence limittypeid
1 LowerFail
2 Pass
3 Warning
4 UpperFail
通缉返回值:
LowerFail Pass Warning UpperFail
< 10.5 >= 11.5 || <= 12.5 >= 10.5 || <= 13.5 > 13.5
基于案例功能基于&#39; limittypeid&#39;我得到4列...但仍然是4行..
当前回报
COLUMN1 COLUMN2 COLUMN3 COLUMN4
< 10.5 ||
>= 11.5 || <= 12.5
>= 10.5 || <= 13.5
> 13.5 ||
二手代码:
SELECT
CASE
WHEN a.limittypeid = 'LowerFail'
THEN concat (b.operator1 , ' ' , b.value1 , ' || ' , b.operator2, ' ' , b.value2)
END,
CASE
WHEN a.limittypeid = 'Pass'
THEN concat (b.operator1 , ' ' , b.value1 , ' || ' , b.operator2, ' ' , b.value2)
END,
CASE
WHEN a.limittypeid = 'Warning'
THEN concat (b.operator1 , ' ' , b.value1 , ' || ' , b.operator2, ' ' , b.value2)
END,
CASE
WHEN a.limittypeid = 'UpperFail'
THEN concat (b.operator1 , ' ' , b.value1 , ' || ' , b.operator2 , ' ' , b.value2)
END
FROM
b
INNER JOIN b.lsequence = a.lsequence
WHERE ......conditions........
我知道一定是可能的。
答案 0 :(得分:0)
你只是错过了GROUP BY。使用那些对于预期行唯一的列。
有关此透视技术的更多信息:https://cdn.company.com
答案 1 :(得分:0)
使用聚合:
SELECT MAX(CASE WHEN a.limittypeid = 'LowerFail'
THEN concat(b.operator1 , ' ' , b.value1 , ' || ' , b.operator2, ' ' , b.value2)
END),
MAX(CASE WHEN a.limittypeid = 'Pass'
THEN concat(b.operator1 , ' ' , b.value1 , ' || ' , b.operator2, ' ' , b.value2)
END),
MAX(CASE WHEN a.limittypeid = 'Warning'
THEN concat(b.operator1 , ' ' , b.value1 , ' || ' , b.operator2, ' ' , b.value2)
END),
MAX(CASE WHEN a.limittypeid = 'UpperFail'
THEN concat(b.operator1 , ' ' , b.value1 , ' || ' , b.operator2 , ' ' , b.value2)
END)
FROM b INNER JOIN
a
ON b.lsequence = a.lsequence
WHERE ......conditions........;
在MAX()
中使用聚合函数(SELECT
)将其转换为聚合查询。没有GROUP BY
,查询只返回一行。