2012-02-10 24 views
1

はのは、クエリ結果がSQLクエリの値の重複

Peter | 1 
Michael | 1 
Tom  | 2 
John | 2 
Ian  | 4 

が行を追加される一意の各companyid値のクエリ結果を作成することが可能です可能性があり

SELECT `name`, `companyid` 
    FROM `users` 

てみましょう

System | <current companyId> 

結果は

となります。私が正しくあなたを理解していた場合は
Peter | 1 
Michael | 1 
System | 1 
Tom  | 2 
John | 2 
System | 2 
Ian  | 4 
System | 4 
+3

何RDBMSは、このですか? –

答えて

3
SELECT * FROM 
( 
    SELECT name,companyid FROM users 
    UNION ALL 
    SELECT DISTINCT 'System', companyid FROM users 
) 
ORDER BY companyid 
+0

"groupid by groupid"句を使用する必要はありませんか? – Bogdan

+0

いいえ2番目の選択はDISTINCTとしてマークされます – Matten

+0

@Bogdan: 'DISTINCT' –

1

、これは動作します:

まずいくつかのテストデータ:

select * 
from 
(
    select name, companyid 
    from users 

    union all 

    select distinct 'System', companyid 
    from users 
)a 
order by companyid 
1
SELECT name,companyid FROM users 
UNION ALL 
(
    SELECT 'System' as name, companyid 
    FROM users 
    GROUP BY companyid 
) 

はそれが

1

たぶん、このような何かを行う必要があります:

DECLARE @tbl TABLE(name VARCHAR(100),companyId INT) 
INSERT INTO @tbl (name,companyId) 
VALUES 
    ('Peter',1), 
    ('Michael',1), 
    ('Tom',2), 
    ('Ian',4) 

次に、このようなクエリ:

;WITH CTE AS 
(
    SELECT 
     RANK() OVER(PARTITION BY companyId ORDER BY name) RowNbr, 
     tbl.companyId, 
     'System' AS name 
    FROM 
     @tbl AS tbl 
) 
SELECT 
    tbl.name, 
    tbl.companyId 
FROM 
    @tbl AS tbl 
UNION ALL 
SELECT 
    CTE.name, 
    CTE.companyId 
FROM 
    CTE 
WHERE 
    CTE.RowNbr=1 
1
SELECT name, companyid 
    FROM users 
UNION 
SELECT 'System' AS name, companyid 
    FROM users;