-1

以下のクエリから複数の値が返された場合、列にアドレス型の値を追加する必要があります。たとえば、単一の結果が返された場合、住所タイプ列の値を Business にする必要があります。しかし、複数の値が返される場合は、最初の結果の後に値をインクリメントして、代替ビジネス 1、代替ビジネス 2、代替ビジネス 3 などにする必要があります。

誰でも私を助けることができますか?

SELECT al.ADDRESS_ID,
       addr.LINE1 + ' (' + addr.LABEL + ')' AS ModifiedLine1,
       addr2.ADDR_TYP_ID,
       addr2.LABEL,
       addr2.LINE2,
       addr2.LINE3,
       addr2.CITY,
       addr2.STATE,
       addr2.COUNTRY,
       addr2.POSTAL_CD
FROM   INT_AUX_LST_ADDR al
       LEFT JOIN INT_AUX_ADDRESS addr
              ON addr.ADDRESS_ID = al.ADDRESS_ID
       LEFT JOIN INT_AUX_ADDRESS addr2
              ON addr2.ADDRESS_ID = al.ADDRESS_ID
       LEFT JOIN INT_RELATION_TYP rt
              ON rt.RLTN_TYP_ID = al.RLTN_TYP_ID
WHERE  al.LISTING_ID = 1 
4

1 に答える 1

1

これは のための仕事ですrow_number()。. . 唯一の注意点は、注文が必要だということです。しかし、ここに行きます:

SELECT al.ADDRESS_ID,
       addr.LINE1 + ' (' + addr.LABEL + ')' AS ModifiedLine1,
       addr2.ADDR_TYP_ID,
       addr2.LABEL,
       addr2.LINE2,
       addr2.LINE3,
       addr2.CITY,
       addr2.STATE,
       addr2.COUNTRY,
       addr2.POSTAL_CD,
       (case row_number() over (order by (select NULL))
             when 1 then 'Business'
             else 'Alternate Business '+cast(-1 + row_number() over (order by (select NULL)) as varchar(255))
        end) as WhatYouWant
FROM   INT_AUX_LST_ADDR al
       LEFT JOIN INT_AUX_ADDRESS addr
              ON addr.ADDRESS_ID = al.ADDRESS_ID
       LEFT JOIN INT_AUX_ADDRESS addr2
              ON addr2.ADDRESS_ID = al.ADDRESS_ID
       LEFT JOIN INT_RELATION_TYP rt
              ON rt.RLTN_TYP_ID = al.RLTN_TYP_ID
WHERE  al.LISTING_ID = 1 ;

ところで、order by上記の例の不確定要素では、2 つの呼び出しが同じ値を返すという保証はありませんrow_number()が、実際にはそうなります。順序付けのための正しいフィールドに置き換えれば、これは問題になりません。

于 2013-08-22T01:30:32.683 に答える