对不起,我是新来的,几乎没有受过任何训练。我已经为此搜索了几天,也许我只是没有使用正确的术语。。。
使用QMF for Windows。
我的ADDRESSTABLE表中有3列——地址标识符代码、地址行序列号及其对应的地址行。ADR_CODE、SEQ_NO、ADRS_LINE。
每个地址记录有3到5行,因此有3到五个序列号。因此,当我查询地址标识符代码时,我会得到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个地址行)。谢谢你,James
虽然不完全是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键上重新加入到同一个地址表,但对于每个地址表,只针对特定的地址行。。。对4和5应用LEFT-JOIN,因为您说过1-3总是,4-5只是可能的(还应用了coalize()来防止NULLs)。