2015-05-15 5 views
-2

У меня есть таблица, как показано ниже.две строки в одну строку в sql

customer_number  note  loayltystatus Tier_code 
123     yes 
123     yes  1     
123            1    

Как совместить одну строку из двух строк, как указано выше, в инструкции выбора?

EG:

customer_number  note  loayltystatus Tier_code 
    123     yes 1    1 
+3

У вас есть 3 строки не 2 ряда –

ответ

4
SELECT customer_number, MAX(note),MAX(loyaltyStatus),MAX(Tier_code) 
FROM yourTable 
GROUP BY customer_number 
+0

Хороший вопрос. На самом деле нет, потому что тогда он будет рассматривать заметки «да» как одну группу, а пустые записи - как другую. Тогда у вас будет две строки: – Stephan

+1

Вы правы @Stephan, глядя ближе к примеру, выходное примечание не будет сгруппированным полем – jradich1234

0

Я использую SQL сервера FOR XML заявление для того, чтобы объединить несколько строк в одну строку. Это будет учитывать любое количество строк с разными значениями в каждом.

IF OBJECT_ID(N'tempdb..#t') IS NOT NULL DROP TABLE #t 
CREATE TABLE #t 
(
    customer_number INT, 
    note   NVARCHAR(100), 
    loyaltystatus INT, 
    Tier_code  INT 
) 

INSERT INTO #t SELECT 123, N'yes', NULL, NULL 

INSERT INTO #t SELECT 123, N'yes', 1, NULL 

INSERT INTO #t SELECT 123, N'yes', NULL, 1 

INSERT INTO #t SELECT 123, N'something else', NULL, NULL 


SELECT 
    customer_number, 
     STUFF(
      (SELECT DISTINCT N',' + note 
       FROM #t AS s    
       WHERE s.customer_number = t.customer_number 
       ORDER BY N',' + note 
       FOR XML PATH(''), TYPE).value('.',N'nvarchar(max)') 
     ,1,1,N'') AS note, 
     STUFF(
      (SELECT DISTINCT N',' + CAST(loyaltystatus AS NVARCHAR(100)) 
       FROM #t AS s    
       WHERE s.customer_number = t.customer_number 
       ORDER BY N',' + CAST(loyaltystatus AS NVARCHAR(100)) 
       FOR XML PATH(''), TYPE).value('.',N'nvarchar(max)') 
     ,1,1,N'') AS loyaltystatus, 
     STUFF(
      (SELECT DISTINCT N',' + CAST(Tier_code AS NVARCHAR(100)) 
       FROM #t AS s    
       WHERE s.customer_number = t.customer_number 
       ORDER BY N',' + CAST(Tier_code AS NVARCHAR(100)) 
       FOR XML PATH(''), TYPE).value('.',N'nvarchar(max)') 
     ,1,1,N'') AS Tier_code 
FROM 
    #t AS t 
GROUP BY customer_number 
Смежные вопросы