对不起,我很新,几乎没有接受过培训。我一直在寻找这几天,也许我只是没有使用正确的条款...
使用QMF for Windows。
我的ADDRESSTABLE表中有3列 - 地址标识符代码,地址行序列号及其对应的地址行。 ADR_CODE,SEQ_NO,ADRS_LINE。
每个地址记录有3到5行,因此有3到5个序列号。因此,当我提取地址标识符代码的查询时,我得到3-5次重复的地址标识符代码。像这样:
SELECT DISTINCT A.ADR_CODE, A.SEQ_NO, A.ADRS_LINE
FROM ADDRESSTABLE A
WHERE (A.ADR_CODE LIKE 'A%')
我得到了:
ADR_CODE SEQ_NO ADRS_LINE
AAAA 1 JOHN DOE
AAAA 2 123 HAPPY STREET
AAAA 3 ANYWHERE, NY
AAAA 4 12345
AABB 1 234 MAIN STREET
AABB 2 SOMEWHERE, MN
AABB 3 34567
ACDE 1 MR PINK
ACDE 2 21 RESERVOIR RD
ACDE 3 APT 4
ACDE 4 LOS ANGELES
ACDE 5 90210
我发现如果我这样做:
SELECT DISTINCT A.ADR_CODE, MIN(A.SEQ_NO CONCAT A.ADRS_LINE) AS
"FIRST ADDRESS LINE", MAX(A.SEQ_NO CONCAT A.ADRS_LINE) AS
"LAST ADDRESS LINE"
FROM ADDRESSTABLE A
WHERE (A.ADR_CODE LIKE 'A%')
ORDER BY A.ADR_CODE ASC
GROUP BY A.ADR_CODE
我明白了:
ADR_CODE FIRST ADDRESS LINE LAST ADDRESS LINE
AAAA 1JOHN DOE 412345
AABB 1234 MAIN STREET 334567
ACDE 1MR PINK 590210
我的问题是,如何让其他人进入两行之间? MIN + 1和MAX-1是非法的,MIN(A.SEQ_NO +1 ......和MAX(A.SEQ_NO-1 ...是非法的。我被卡住了,我不想使用PIVOT,因为我想要这一切都是一个更大的查询的一部分。简而言之,我的查询最终应该有大约7000行货运记录 - 每行都有自己的地址 - 而不是7000行*(每条记录3到5个地址行)谢谢你,詹姆斯
答案 0 :(得分:0)
虽然不完全是PIVOT,但同一个地址表的多重连接是否适合您...
SELECT
A.ADR_CODE,
A.ADRS_LINE as AdrLine1,
A2.ADRS_LINE as AdrLine2,
A3.ADRS_LINE as AdrLine3,
COALESCE( A4.ADRS_LINE, "" ) as AdrLine4,
COALESCE( A5.ADRS_LINE, "" ) as AdrLine5
FROM
ADDRESSTABLE A
JOIN ADDRESSTABLE A2
ON A.ADR_CODE = A2.ADR_CODE
AND A2.SEQ_NO = 2
JOIN ADDRESSTABLE A3
ON A.ADR_CODE = A3.ADR_CODE
AND A3.SEQ_NO = 3
LEFT JOIN ADDRESSTABLE A4
ON A.ADR_CODE = A4.ADR_CODE
AND A4.SEQ_NO = 4
LEFT JOIN ADDRESSTABLE A5
ON A.ADR_CODE = A5.ADR_CODE
AND A5.SEQ_NO = 5
WHERE
A.ADR_CODE LIKE 'A%'
AND A.SEQ_NO = 1
ORDER BY
A.ADR_CODE
由于查询仅应用于序列#1的地址表,因此您将保留不同的adr_code,因为您没有获得可能的2-5地址行。
现在来了JOIN。我在同一个adr_code键上重新加入相同的地址表,但是对于每一个地址表只有那个特定的地址线...应用LEFT-JOIN为4和5,因为你说1-3总是和4-5只是可能的(还应用coalesce()来防止NULL。)