0

emp次のデータを含むテーブルがあります。

id name phone no
---------------------
1 smith 423-422-5226
1 smith 414-255-5252
2 george 511-522-2525
2 george 524-522-2428

次のような出力が必要です。

1 smith 423-422-5226, 414-255-5252
2 george 511-522-2525, 524-522-2428

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

4

5 に答える 5

5

使用しているRDBMSを指定しなかったため、タグからSQLServerを使用していると仮定します。FOR XML次に、次のように使用できます。

SELECT 
  t1.Id,
  t1.name
  STUFF((
    SELECT ', ' + t2.phone_no
    FROM Table1 t2
    WHERE t2.ID   = t1.ID
      AND t2.Name = t1.Name
    FOR XML PATH (''))
  ,1,2,'') AS PhoneNumbers
FROM Table1 t1
GROUP BY t1.Id, 
         t1.Name;

SQLフィドルデモ

これはあなたに与えるでしょう:

| ID |   NAME |               PHONENUMBERS |
--------------------------------------------
|  1 |  smith | 423-422-5226, 414-255-5252 |
|  2 | george | 511-522-2525, 524-522-2428 |
于 2012-12-29T19:22:47.807 に答える
3

これは、

**GROUP_CONCAT() for MYSQL,NETEZZA
WM_CONCAT() for ORACLE**

ここにあなたの質問があります

select id,name, group_concat(phoneno) phoneno
from emp 
group by id,name

データベースに応じて使用してください

SQLLiveDemo

サンプル出力、

ID  NAME    PHONENO
1   smith   423-422-5226,414-255-5252
2   george  511-522-2525,524-522-2428
于 2012-12-29T19:14:25.140 に答える
3

名前ごとに最大 2 行ある場合は、次のことができます。

select id, name, min(phone_no), max(phone_no)
from emp
group by id, name

より多くの電話番号があり、それらを 1 つのフィールドに連結したい場合は、集計文字列連結関数が必要です。これを行う方法は、使用している方言と SQL のバージョンによって異なります。

于 2012-12-29T19:17:59.850 に答える
0

MicrosoftのTobiasTernstromには、sqlserver2005以降で機能する回避策があります。AdventureWorksMicrosoftサンプルデータベースを使用した次の例を検討してください。

 SELECT 
        soh.OrderDate
        ,(
            SELECT 
                p.Name + ', '
            FROM Production.Product AS p
            INNER JOIN Sales.SalesOrderDetail AS sod ON p.ProductID = sod.ProductID
            WHERE sod.SalesOrderID = soh.SalesOrderID
            FOR XML PATH(''), TYPE
         ).value('/', 'NVARCHAR(max)') AS ProductsOrdered
    FROM Sales.SalesOrderHeader AS soh

ここで同じ問題について議論しているところを参照してください: 文字列集計関数、数値のSUMのようなもの

于 2012-12-29T19:24:47.773 に答える
0
select a.id, a.name, a.phoneno, b.phoneno
from emp a
left join emp b on a.id = b.id and a.name = b.name and a.phoneno <> b.phoneno
于 2012-12-29T19:11:42.310 に答える