gpt4 book ai didi

sql - 在 SQL 中查询一个杂乱的表

转载 作者:行者123 更新时间:2023-12-02 00:48:28 26 4
gpt4 key购买 nike

我需要一些帮助来编写一个查询,该查询将把我遇到的最奇怪的表之一变成有用的东西。所以就这样了……这是一个 SQL 表(我们称它为“THRESHOLDS”),它显示了阈值的每周概况。看起来像:

Column 1, 'Product' = X
Column 2, 'Monday_AM' = 0-2;1-2;2-2;3-2;4-2;5-2;6-2;7-2;8-2;9-2;10-2;11-2
Column 3, 'Monday_PM' = 0-2;1-2;2-2;3-2;4-2;5-2;6-2;7-2;8-2;9-2;10-2;11-2
...
Column 15, 'Sunday_PM' = 0-2;1-2;2-2;3-2;4-2;5-2;6-2;7-2;8-2;9-2;10-2;11-2

可以看到,有14列有阈值,每半天一列。在行中,我们有从(比方说)A 到 Z 的产品,每天和每小时都有不同的阈值。

我想要的(基于上面的例子)是:

Product     Day     Hour    Threshold
X 1 0 2
X 1 1 2
X 1 2 2
X 1 3 2
X 1 4 2
X 1 5 2
X 1 6 2
X 1 7 2
X 1 8 2
X 1 9 2
X 1 10 2
X 1 11 2
X 1 12 2
X 1 13 2
X 1 14 2
X 1 15 2
X 1 16 2
X 1 17 2
X 1 18 2
X 1 19 2
X 1 20 2
X 1 21 2
X 1 22 2
X 1 23 2
X 2 0 2
X 2 1 2
X 2 2 2
X 2 3 2
etc…

是否有任何方便的技巧可以用于此类转换?我在挣扎!

感谢您的关注。 :)

最佳答案

您可以使用cross apply 取消透视,然后使用string_split() 和一些字符串操作:

select t.product, v.day,
(left(s.value, charindex('-', s.value) - 1) + v.offset) as hour,
stuff(s.value, 1, charindex('-', s.value), '')
from t cross apply
(values (t.monday_am, 1, 0),
(t.monday_pm, 1, 12),
(t.tuesday_am, 2, 0),
. . .
) v(str, day, offset)
string_split(v.str, ';') s

Here是一个数据库<> fiddle 。

关于sql - 在 SQL 中查询一个杂乱的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59581918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com