2016-08-09 5 views
1

Я пытаюсь создать отчет с одной строкой для каждого клиента, однако для каждого клиента существует несколько строк.Как вернуть одну строку с несколькими значениями столбцов?

Текущая точка зрения:

Customer Business Dept Type Status 
----------------------------------------------- 
019  Public  null null null   
019   null  IT  null null 
019   null  null Retail 0 --char(1) 

Мой желаемый вид является:

Customer Business Dept Type Status 
----------------------------------------------- 
019  Public  IT  Retail 0 

Я использую SQL Server 2008 R2. В моем наборе данных больше столбцов, но это образец. Я не уверен, как добиться результатов, когда мой тип данных является символом, а не INT.

ответ

3

Если это является типичным примером, и каждый столбец всегда будет иметь одну строку со значением, а другие будут иметь null с, вы могли бы использовать агрегат max или min, которые игнорируют null S:

SELECT customer, MAX(business), MAX(dept), MAX(type), MAX(status) 
FROM  mytable 
GROUP BY customer 
+1

Я знал, что я усложнять его, пытаясь получить функции Row/Перегородки работать, спасибо !!! – CoffeeCoder

1

попробовать что-то это:

CREATE TABLE #tmp ([Customer] CHAR(3), [Business] VARCHAR(20), [Dept] VARCHAR(20), [Type] VARCHAR(20), [Status] CHAR(1)) 
INSERT INTO #tmp (Customer, Business) VALUES ( '019', 'Public') 
INSERT INTO #tmp (Customer,Dept) VALUES ('019','IT') 
INSERT INTO #tmp (Customer,[Type]) VALUES ('019','Retail') 
INSERT INTO #tmp (Customer,[Status]) VALUES ('019','0') 
SELECT * FROM #tmp AS t 

SELECT t.Customer, t.Business, t2.Dept, t3.[Type], t4.[Status] FROM #tmp AS t 
JOIN #tmp AS t2 ON t2.Customer = t.Customer 
JOIN #tmp AS t3 ON t3.Customer = t.Customer 
JOIN #tmp AS t4 ON t4.Customer = t.Customer 
WHERE t.Business IS NOT NULL AND t2.Dept IS NOT NULL AND t3.[Type] IS NOT NULL AND t4.[Status] IS NOT NULL 
Смежные вопросы