2016-01-04 2 views
1

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

tblHipChop

hop acp  ID 
20  20  amdb_ma_se_1234 
350 30  amdb_ma_se_1234 

Возвратить следующее:

hop_a hcp_b acp_a  acp_b  ID 
20  350  20  30  amdb_ma_se_1234 
+0

Является ли намерение, что если бы существовала третья строка для 'amdb_ma_se_1234', было бы 7 столбцов вместо 5 и с суффиксом' _c'? Если это так, это нелегко сделать в SQL (где любой заданный запрос имеет фиксированную «форму» - количество столбцов, имен и типов) - разве это не вариант сделать это на уровне презентации? –

+0

Нет, это необходимо сделать в SQL Server. Мне нужно создать отчет и экспортировать в Excel. Благодарю. –

ответ

1
DECLARE @tblHipChop TABLE (hop INT, [acp] INT, ID VARCHAR(50)) 

INSERT INTO @tblHipChop 
VALUES (20, 20, 'amdb_ma_se_1234'), (350, 30, 'amdb_ma_se_1234') 

SELECT 
    hop_a = MAX(CASE WHEN t.RowNum = 1 THEN hop END), 
    hcp_b = MAX(CASE WHEN t.RowNum = 2 THEN hop END), 
    acp_a = MAX(CASE WHEN t.RowNum = 1 THEN [acp] END), 
    acp_b = MAX(CASE WHEN t.RowNum = 2 THEN [acp] END), 
    ID 
FROM (
    SELECT *, RowNum = ROW_NUMBER() OVER (PARTITION BY ID ORDER BY 1/0) 
    FROM @tblHipChop 
) t 
GROUP BY t.ID 

выход -

hop_a  hcp_b  acp_a  acp_b  ID 
----------- ----------- ----------- ----------- ----------------- 
20   350   20   30   amdb_ma_se_1234 

чек о - ROW_NUMBER

+0

Что означает ORDER BY 1/0? –

+1

@HeartBleed, это просто записи сортировки в натуральном порядке ... Проверьте аналогичный вопрос: http://stackoverflow.com/questions/4810627/sql-server-2005-row-number-without-order-by – Devart

Смежные вопросы