MS SQL 2012查询结合每个重复的找到的条目

时间:2015-11-19 14:47:25

标签: sql sql-server vb.net sql-server-2012

嘿所有我想要创建一个查询,以便我可以将每个找到的重复项组合成一个条目。

这方面的一个例子是:

Name        | ID    | Tag   | Address           |carNum
-------------------------------------------------------
Bob Barker  |2054   |52377  |235 Some road      |9874
Bill Gates  |5630   |69471  |014 Washington Rd. |3700
Bob Barker  |2054   |97011  |235 Some road      |9874
Bob Barker  |2054   |40019  |235 Some road      |9874
Steve Jobs  |8501   |73051  |100 Infinity St.   |4901
John Doe    |7149   |86740  |7105 Bull Rd.      |9282
Bill Gates  |5630   |55970  |014 Washington Rd. |3700
Tim Boons   |6370   |60701  |852 Mnt. Creek Rd. |7059

在上面的示例中, Bob Barker Bill gates 都在数据库中不止一次,所以我希望输出如下:

Bob Barker|2054|52377/97011/40019       |235 Some road     |9874
Bill Gates|5630|69471/55970             |014 Washington Rd.|3700
Steve Jobs|8501|73051                   |100 Infinity St.  |4901
John Doe  |7149|86740                   |7105 Bull Rd.     |9282
Tim Boons |6370|60701                   |852 Mnt. Creek Rd.|7059

注意 Bob Barker & 比尔盖茨 将标记行(重复数据)附加到一行而不是多行。 这是因为我不想检查以前的ID并查看它是否与当前ID匹配并附加到数据。

我希望SQL查询大师会有一个查询来为我做这个!

感谢您的时间和帮助!

-------------------------------------------- -------------------------------------------------- --------------------------

问题已从ACCESS DATABASE更改为MS SQL SERVER 2012数据库

-------------------------------------------- -------------------------------------------------- --------------------------

2 个答案:

答案 0 :(得分:2)

对标记字段使用MySQL GROUP_CONCAT,并使用名称字段按数据分组。

Query:
SELECT Name,  ID, GROUP_CONCAT(Tag SEPARATOR '/') AS Tag, Address, carNum 
FROM users GROUP BY Name

答案 1 :(得分:0)

你可以这样做:

CREATE TABLE MyTable    ( Name      nvarchar(50)
                        , ID        int
                        , Tag       int
                        , Address   nvarchar(50)
                        , carNum    int
                        )

INSERT INTO MyTable VALUES
  ('Bob Barker', 2054, 52377, '235 Some road'       , 9874)
, ('Bill Gates', 5630, 69471, '014 Washington Rd.'  , 3700)
, ('Bob Barker', 2054, 97011, '235 Some road'       , 9874)
, ('Bob Barker', 2054, 40019, '235 Some road'       , 9874)
, ('Steve Jobs', 8501, 73051, '100 Infinity St.'    , 4901)
, ('John Doe'  , 7149, 86740, '7105 Bull Rd.'       , 9282)
, ('Bill Gates', 5630, 55970, '014 Washington Rd.'  , 3700)
, ('Tim Boons' , 6370, 60701, '852 Mnt. Creek Rd.'  , 7059)

SELECT  YT.Name
        , ID
        , LEFT(YT.SUB, LEN(YT.SUB) - 1) AS Tags
        , Address
        , carNum
FROM    (SELECT DISTINCT
                Name
                , ( SELECT      CAST(ST1.Tag AS nvarchar(5)) + ',' AS [text()]
                    FROM        MyTable ST1
                    WHERE       ST1.ID = ST2.ID
                    ORDER BY    ST1.Name
                FOR
                 XML PATH('')
                ) SUB
              , ID
              , Address
              , carNum
         FROM   MyTable ST2
        ) YT

DROP TABLE MyTable