5

テーブルのクエリを見つけるのに問題がある

次のように、テーブルAとテーブルBの2つのテーブルがあります

table A 
---------------------
|   Name   | addrid |
---------------------
|   zlai   |   1    |
|   blai   |   2    |

table B 
---------------------
| addrid |   addr     |
---------------------
|   1    |   AMERICA  |
|   1    |   SPAIN    |
|   1    |   MEXICO   |
|   2    |   TURKEY   |

私が必要とする結果は

--------------------------
|   Num  | Name  | addr    |
--------------------------
|    1   | zlai  | AMERICA |               
|        |       | SPAIN   |
|        |       | MEXICO  |
|    2   | blai  | TURKEY  |

これまでに試したクエリ

http://sqlfiddle.com/#!12/3ac39/12

4

3 に答える 3

2

値を 101 と 325で変更しようとしaddridます (たとえば)

table A 
---------------------
|   Name   | addrid |
---------------------
|   zlai   |   101  |
|   blai   |   325  |

table B 
---------------------
| addrid |   addr     |
---------------------
|   101  |   AMERICA  |
|   101  |   SPAIN    |
|   101  |   MEXICO   |
|   325  |   TURKEY   |

クエリは次のとおりです。

SELECT  CASE WHEN No != 1
             THEN ''
             ELSE CAST(row AS VARCHAR(20))
        END  AS Num,
        CASE WHEN No != 1
             THEN ''
             ELSE name
        END  AS name,
        addr
FROM
        (
          SELECT  ROW_NUMBER() OVER (PARTITION BY a.addrid 
                                     ORDER BY name DESC) AS No,
                  name, 
                  addr,
                  DENSE_RANK() OVER (ORDER BY a.addrid) "row"
          FROM    a LEFT JOIN b ON a.addrid = b.addrid
        ) a
ORDER   BY row

結果はあなたが望むものと同じです。

SQL フィドルのデモ

于 2013-10-11T09:12:21.940 に答える
1

SQLFIddel デモはこちら

以下は、試すことができるサンプルクエリです。

select Case rownum when 1 then cast(addrid as varchar(20)) else '' end as addrid,
       Case rownum when 1 then cast(name as varchar(20)) else '' end as name,
       addr
from (select a.addrid,a.name,b.addr,dense_rank() over (partition by a.addrid order by b.addr) as rownum
  from a,b
 where a.addrid = b.addrid) T
于 2013-10-11T07:41:24.220 に答える