2012-02-10 4 views
1

Давайте запросSql значения запроса дублирование

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

, где результат может быть

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

Можно ли создать результат запроса, где для каждого уникального companyid значения будет добавлен ряд

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

вам не нужно было бы использовать предложение «group by companyid»? – Bogdan

+0

нет второй выбор отмечен как 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; 
Смежные вопросы