【发布时间】:2020-08-22 07:20:51
【问题描述】:
我有一张这样的桌子
tbl1
w1 w2 w3 w4 w5 w6
4 6 2 17 29 3
我正在尝试获得这样的输出
new_C1 new_C2 new_C3 new_C4 New_C5 New_C6
2 3 4 6 17 29
我的代码如下,但它不适用于第 3 列和第 4 列
SELECT
MIN(w1,w2,w3,w4,w5,w6) AS new_c1,
CASE MIN(w1,w2,w3,w4,w5,w6)
WHEN w1 THEN MIN(w2, w3, w4,w5,w6)
WHEN w2 THEN MIN(w1, w3, w4,w5,w6)
WHEN w3 THEN MIN(w1, w2, w4,w5,w6)
WHEN w4 THEN MIN(w1, w2, w3,w5,w6)
WHEN w5 THEN MIN(w1, w2, w3,w4,w6)
WHEN w6 THEN MIN(w1, w2, w3,w4,w5)
END AS new_c2,
CASE MIN(w1,w2,w3,w4,w5,w6)
WHEN w1 THEN MIN(w2, w3, w4,w5,w6)
WHEN w2 THEN MIN(w1, w3, w4,w5,w6)
WHEN w3 THEN MIN(w1, w2, w4,w5,w6)
WHEN w4 THEN MIN(w1, w2, w3,w5,w6)
WHEN w5 THEN MIN(w1, w2, w3,w4,w6)
WHEN w6 THEN MIN(w1, w2, w3,w4,w5)
END AS new_c3,
CASE MAX(w1,w2,w3,w4,w5,w6)
WHEN w1 THEN MAX(w2, w3, w4,w5,w6)
WHEN w2 THEN MAX(w1, w3, w4,w5,w6)
WHEN w3 THEN MAX(w1, w2, w4,w5,w6)
WHEN w4 THEN MAX(w1, w2, w3,w5,w6)
END AS new_c5,
MAX(w1, w2, w3, w4,w5,w6) AS newC6
FROM tb1
有人可以帮我编写 SQLlite 中的代码吗?特别是对于 w3 和 w4
【问题讨论】:
-
这不是我在 SQL 中会做的事情。您的方法还不错,但是...对于第二列,您必须知道第一列的结果,这是您必须考虑的六种可能性。对于第三列,您必须知道第 2 列的结果,因此考虑 6x6 的可能性。对于第三个,您将编写 6x6x6 行...如果您必须在 SQL 中执行此操作,我建议您使用迭代过程,即递归查询。或者使用
UNION ALL将列旋转到行,然后使用ROW_NUMBER获取排序键,然后使用条件聚合取消旋转。如前所述:我不会用 SQL 做任何事情。 -
也许您只需要另一个数据模型。如果您的数据库包含行而不是列中的值,则不会出现此问题。
标签: sql sql-server sqlite