从水平到垂直访问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。”