QMF在没有PIVOT的情况下将序列号结果转换为自己的列



对不起,我是新来的,几乎没有受过任何训练。我已经为此搜索了几天,也许我只是没有使用正确的术语。。。

使用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)。

最新更新