2017-02-23 137 views
-1

Я хотел бы вывести данные из базы данных в следующем формате:Создание двух строк для одной и той же ссылки, в зависимости от значения столбца

No | Ref | Net | Vat | VatCode 
-------------------------------- 
1 | 1 | 250 | NULL | T0 
2 | 2 | 83.61 | NULL | T0 
3 | 2 | NULL | 16.72 | T1 
4 | 3 | 300 | NULL | T0 

Так что если VatCode равен Т0, то это показывает одну строки:

  • Чистая стоимость, NULL для Vat и T0 для VatCode;

Но если VatCode равно T1, то мы должны создать две строки для одной и той же работы:

  • первой строка должна содержать значение нетто, NULL для Ваты и T0 для VatCode;
  • вторая строка должна содержать NULL для Net, значение Vat и T1 для VatCode

Как можно достичь этого?

ответ

2

Вы можете делать то, что вы хотите с помощью union all:

select No, Ref, Net, NULL as Vat, 'T0' as VatCode 
from t 
where VatCode in ('T0', 'T1') 
union all 
select No, Ref, NULL as Net, Vat, VatCode 
from t 
where VatCode = 'T1'; 

EDIT:

Если No не является частью исходных данных:

select (@rn := @rn + 1) as No, Ref, Net, Vat, VatCode 
from (select Ref, Net, NULL as Vat, 'T0' as VatCode 
     from t 
     where VatCode in ('T0', 'T1') 
     union all 
     select Ref, NULL as Net, Vat, VatCode 
     from t 
     where VatCode = 'T1' 
    ) t cross join 
    (select @rn := 0) params; 
+0

Есть ли у вас какой-то хрустальный шар ? – Strawberry

+2

hmmm .. ОП запрашивает уникальный последовательный 'Нет', возможно, не входит в' t' ... – Dario

+0

@Dario. , , Хорошее наблюдение. –