从水平到垂直访问sql查询
我有一个映射表从水平到垂直访问sql查询,sql,ms-access-2010,Sql,Ms Access 2010,我有一个映射表 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 10
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
以及表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
我试图将表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
如何在access sql查询中表示?考虑使用一个派生表来计算行数,并有条件地使用
RowCount
来检索S
列。这在大多数SQL方言中应该是兼容的,只需将Access“IIF()
更改为ANSI-SQL的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
使用用于生成中间结果的查询编辑您的问题。很抱歉,无法获取您的答案answer@GordonLinoff这是他可能没有的权限SQL@Hogan,MS Access默认配备Jet/ACE SQL引擎。@Parfait-是的,我知道这一点。。。我想我错过了你的演讲。我应该说“他可能不知道如何从他的查询中检索SQL。”