2012-10-12 99 views
2

我在使用函数concatrelated在sql语句上有问题。我想获得如下:使用连接的vba excel

我的数据是:

A.CABNRO E01.EXCCEX 
90001 500 
87000 400 
90001 450 
90001 300 
87000 500 
76005 

我想获得:

A.CABNRO NEW FIELD 
90001 500,450,300 
87000 400,500 
76005 

下面的代码不运行时,我包括与concatrelated相关的声明。如果有人能帮助我,我将不胜感激!

MYSQL = "SELECT A.CABFPR, A.CABCIA, A.CABCTR, B.CTRDTR, A.CABLOE, " 
MYSQL = MYSQL & "A.CABNRO, A.CABCAR, A.CABFED, A.CABHOD, A.CABFEI, " 
MYSQL = MYSQL & "A.CABHOI, A.CABFEF, A.CABHOF, A.CABFEE, A.CABHOE, " 
MYSQL = MYSQL & "A.CABCCL, A.CABNEM, A.CABDEM " 
MYSQL = MYSQL & "CONCATRELATED(EXCCEX, E01, A.CABNRO=E01.EXCNRO) " 
MYSQL = MYSQL & "FROM BDYOBEL.AIPDTA.AIPCAB A " 
MYSQL = MYSQL & "LEFT OUTER JOIN BDYOBEL.AIPDTA.AIPCTR B ON A.CABCIA=B.CTRCIA AND A.CABCTR=B.CTRCTR " 
MYSQL = MYSQL & "LEFT OUTER JOIN BDYOBEL.AIPDTA.AIPEXC E01 ON A.CABNRO=E01.EXCNRO " 
MYSQL = MYSQL & "WHERE A.CABCIA='LOR' AND A.CABFED>=" 
MYSQL = MYSQL & Chr$(39) & fini & Chr$(39) & "AND A.CABFED<=" & Chr$(39) & ffin & Chr$(39) 
MYSQL = MYSQL & " AND (A.CABCTR='DM' OR A.CABCTR='L1' OR A.CABCTR='L5' OR A.CABCTR='LR') AND A.CABCAR<>'0'" 
+3

您选择的数据比您的示例数据暗示的要多得多。 – LittleBobbyTables

回答

0

http://allenbrowne.com/func-concat.html陈述

如果ConcatRelated函数返回超过255个字符,并 在查询中为源动力的另一个记录用它,在 访问的错误可能会返回垃圾为其余的字符。

这可能可以解释为什么你的代码不工作。
在Access中无法实现非固定数量列的聚合数据。你能做的最好的事情就是写这样的东西,并将这些列与文本编辑器结合起来。

TRANSFORM Sum(E01.EXCCEX) AS SumOfEXCCEX 
SELECT A.CABNRO 
FROM [BDYOBEL-AIPDTA-AIPCAB] AS A INNER JOIN [BDYOBEL-AIPDTA-AIPEXC] AS E01 ON 
    A.CABNRO = E01.EXCNRO 
GROUP BY A.CABNRO 
ORDER BY A.CABNRO DESC , E01.EXCCEX DESC 
PIVOT E01.EXCCEX; 

运行查询,可为您的数据。例如得到以下结果: screenshot of access output