access sql 查询水平转垂直
access sql query horizontal to vertical
我有一个映射 table
EK_ID CS EK_ID-CS
1001 1071 1001_1071
1001 1015 1001_1015
1004 1061 1004_1061
1004 1007 1004_1007
1004 1006 1004_1006
1004 1005 1004_1005
1005 1011 1005_1011
1005 1010 1005_1010
1006 1013 1006_1013
1006 1012 1006_1012
和Table B,它有公共字段EK_ID。
EK_ID S1 S2 S3 S4
1001 0.94 0.03 0.01
1004 0.96 8.12 38.10 0.06
1005 1 2.30
1006 1 2.47
内连接直到字段 S1 给出结果
EK_ID CS EK_ID-CS S1
1001 1071 1001_1071 0.94
1001 1015 1001_1015 0.94
1004 1061 1004_1061 0.96
1004 1007 1004_1007 0.96
1004 1006 1004_1006 0.96
1004 1005 1004_1005 0.96
1005 1011 1005_1011 1
1005 1010 1005_1010 1
1006 1013 1006_1013 1
1006 1012 1006_1012 1
我正在尝试将 table B 中的列 S2、S3、S4 值写为一列 S2,垂直如下
EK_ID CS EK_ID-CS S1 S2
1001 1071 1001_1071 0.94 0.03
1001 1015 1001_1015 0.94 0.01
1004 1061 1004_1061 0.96
1004 1007 1004_1007 0.96 8.12
1004 1006 1004_1006 0.96 38.10
1004 1005 1004_1005 0.96 0.06
1005 1011 1005_1011 1 2.30
1005 1010 1005_1010 1
1006 1013 1006_1013 1 2.47
1006 1012 1006_1012 1
如何在访问 sql 查询中表示?
考虑使用派生的 table 计算行数并有条件地使用 RowCount
检索 S
列。这应该符合大多数 SQL 方言,只需将 Access' IIF()
更改为 ANSI-SQL's CASE/WHEN
:
SELECT EK_ID, CS, [EK_ID-CS], S1,
IIF(RowCount = 2, dTS2,
IIF(RowCount = 3, dTS3,
IIF(RowCount = 4, dTS4, NULL))) As S2
FROM
(SELECT TableA.EK_ID, TableA.CS, TableA.[EK_ID-CS], TableB.S1,
TableB.S2 As dTS2, TableB.S3 As dTS3, TableB.S4 As dTS4,
(SELECT Count(*) + 1 FROM TableA t2
WHERE t2.EK_ID = TableA.EK_ID AND t2.CS >= TableA.CS) As RowCount
FROM TableA INNER JOIN TableB ON TableA.EK_ID = TableB.EK_ID
ORDER BY TableA.EK_ID, TableA.CS DESC
) As DerivedTable
输出
EK_ID CS EK_ID-CS S1 S2
1001 1071 1001_1071 0.94 0.03
1001 1015 1001_1015 0.94 0.01
1004 1061 1004_1061 0.96 8.12
1004 1007 1004_1007 0.96 38.1
1004 1006 1004_1006 0.96 0.06
1004 1005 1004_1005 0.96
1005 1011 1005_1011 1 2.3
1005 1010 1005_1010 1
1006 1013 1006_1013 1 2.47
1006 1012 1006_1012 1
我有一个映射 table
EK_ID CS EK_ID-CS
1001 1071 1001_1071
1001 1015 1001_1015
1004 1061 1004_1061
1004 1007 1004_1007
1004 1006 1004_1006
1004 1005 1004_1005
1005 1011 1005_1011
1005 1010 1005_1010
1006 1013 1006_1013
1006 1012 1006_1012
和Table B,它有公共字段EK_ID。
EK_ID S1 S2 S3 S4
1001 0.94 0.03 0.01
1004 0.96 8.12 38.10 0.06
1005 1 2.30
1006 1 2.47
内连接直到字段 S1 给出结果
EK_ID CS EK_ID-CS S1
1001 1071 1001_1071 0.94
1001 1015 1001_1015 0.94
1004 1061 1004_1061 0.96
1004 1007 1004_1007 0.96
1004 1006 1004_1006 0.96
1004 1005 1004_1005 0.96
1005 1011 1005_1011 1
1005 1010 1005_1010 1
1006 1013 1006_1013 1
1006 1012 1006_1012 1
我正在尝试将 table B 中的列 S2、S3、S4 值写为一列 S2,垂直如下
EK_ID CS EK_ID-CS S1 S2
1001 1071 1001_1071 0.94 0.03
1001 1015 1001_1015 0.94 0.01
1004 1061 1004_1061 0.96
1004 1007 1004_1007 0.96 8.12
1004 1006 1004_1006 0.96 38.10
1004 1005 1004_1005 0.96 0.06
1005 1011 1005_1011 1 2.30
1005 1010 1005_1010 1
1006 1013 1006_1013 1 2.47
1006 1012 1006_1012 1
如何在访问 sql 查询中表示?
考虑使用派生的 table 计算行数并有条件地使用 RowCount
检索 S
列。这应该符合大多数 SQL 方言,只需将 Access' IIF()
更改为 ANSI-SQL's CASE/WHEN
:
SELECT EK_ID, CS, [EK_ID-CS], S1,
IIF(RowCount = 2, dTS2,
IIF(RowCount = 3, dTS3,
IIF(RowCount = 4, dTS4, NULL))) As S2
FROM
(SELECT TableA.EK_ID, TableA.CS, TableA.[EK_ID-CS], TableB.S1,
TableB.S2 As dTS2, TableB.S3 As dTS3, TableB.S4 As dTS4,
(SELECT Count(*) + 1 FROM TableA t2
WHERE t2.EK_ID = TableA.EK_ID AND t2.CS >= TableA.CS) As RowCount
FROM TableA INNER JOIN TableB ON TableA.EK_ID = TableB.EK_ID
ORDER BY TableA.EK_ID, TableA.CS DESC
) As DerivedTable
输出
EK_ID CS EK_ID-CS S1 S2
1001 1071 1001_1071 0.94 0.03
1001 1015 1001_1015 0.94 0.01
1004 1061 1004_1061 0.96 8.12
1004 1007 1004_1007 0.96 38.1
1004 1006 1004_1006 0.96 0.06
1004 1005 1004_1005 0.96
1005 1011 1005_1011 1 2.3
1005 1010 1005_1010 1
1006 1013 1006_1013 1 2.47
1006 1012 1006_1012 1