【发布时间】:2020-10-16 10:29:13
【问题描述】:
简短的问题,对 SQL server 不太熟悉,但我在 oracle sql server 中有多个聚合的查询。
多重聚合的sql server等效查询是什么?
Oracle 代码:
[SELECT *
FROM (SELECT d.loc_area,
d.loc_rack,
d.loc_height,
d.loc_place,
d.locvrc,
row_number() OVER(PARTITION BY d.loc_area, d.loc_rack, d.loc_place
ORDER BY d.loc_height) rn_pivot
FROM (select locvrc,
SUBSTR(stoloc, 0, 2) loc_area,
SUBSTR(stoloc, 4, 2) loc_rack,
SUBSTR(stoloc, 6, 1) loc_place,
SUBSTR(stoloc, -2) loc_height
FROM locls) d)
PIVOT (MAX(loc_height) AS EXT, MIN(locvrc) AS UNIQ FOR rn_pivot IN ('1' AS HEIGHT_1, '2' AS HEIGHT_2, '3' AS HEIGHT_3, '4' AS HEIGHT_4))
ORDER BY LOC_AREA,
LOC_RACK,
LOC_PLACE]
SQL 服务器:
SELECT *
FROM (SELECT d.loc_area,
d.loc_rack,
d.loc_height,
d.loc_place,
d.locvrc,
row_number() OVER(PARTITION BY d.loc_area, d.loc_rack, d.loc_place
ORDER BY d.loc_height) rn_pivot
FROM (select locvrc,
SUBSTRing(stoloc, 0, 2) loc_area,
SUBSTRing(stoloc, 4, 2) loc_rack,
SUBSTRing(stoloc, 6, 1) loc_place,
right(stoloc, 2) loc_height
FROM locls) d) A
PIVOT (MAX(loc_height) FOR rn_pivot IN ([1],[2],[3],[4])) P1
这工作正常,但我还需要另一个聚合 |(MIN(locvrc)| 也
提前谢谢你!
溴 一月
/编辑,
原表:
Stoloc locvrc
5D-32A-00 699787
5D-32A-10 439567
5D-32A-20 429456
5D-32A-30 122172
5D-32B-00 328311
5D-32B-10 247422
5D-32B-20 133244
5D-32B-30 464978
子字符串后的表格:
loc_area loc_rack loc_place loc_height locvrc
5D 32 A 00 699787
5D 32 A 10 439567
5D 32 A 20 429456
5D 32 A 30 122172
5D 32 B 00 328311
5D 32 B 10 247422
5D 32 B 20 133244
5D 32 B 30 464978
我对 Oracle 的看法是:
loc_area loc_rack loc_place Height1 Uniq1 Height2 Uniq2 Height3 Uniq3 Height4 Unique4
5D 32 A 00 699787 10 439567 20 429456 30 122172
5D 32 B 00 328311 10 247422 20 133244 30 464978
因此,从原始表格中,stoloc 将被切割成不同的列。在这一行之后,区域、机架、位置和它们在一行中的高度和 locvrc。我已经在 Oracle 数据库中完成了这项工作,但不知道如何在 SQl 服务器中完成。不需要这种解决方案,任何人都可以。
【问题讨论】:
-
提供示例数据、期望的结果以及代码应该做什么的清晰解释。
-
添加了更多信息。让我知道是否仍然缺乏。 -一月
-
示例表中的列名与查询中的列(
stoloc)不符 -
我知道这是一团糟。我需要编辑全新的帖子以便更容易提供帮助。认为会有简单的解决方案,比如“在此处添加”:)
-
@Jan00,已更新,现在应该给出正确的结果 :)
标签: sql sql-server oracle pivot