Я очень новичок в SQL, и я не уверен, как выполнить следующую задачу: у меня есть набор данных в таблице, и мне нужно преобразовать данные в одно из двух значений, а затем суммировать итоговые значения для каждой строки в паре сводных столбцов. Смотрите ниже:SQL - преобразование значений, количество экземпляров в нескольких столбцах
tbl1:
row P1 P2 P3
--- --- --- ---
1 a b c
2 a a a
3 b c b
4 a b b
5 NULL NULL NULL
с таблицей преобразования, как:
PNum PType
---- -----
a car
b truck
c car
Желаемый конечный результат:
row P1 P2 P3 numCars numTrucks
--- --- --- --- ------- ---------
1 a b c 2 1
2 a a a 3 0
3 b c b 1 2
4 a b b 1 2
5 NULL NULL NULL NULL NULL
код, чтобы получить тестовые таблицы:
DECLARE @tbl1 TABLE(P1 VARCHAR,P2 VARCHAR,P3 VARCHAR)
INSERT INTO @tbl1
SELECT 'a','b','c' UNION ALL
SELECT 'a','a','a' UNION ALL
SELECT 'b','c','b' UNION ALL
SELECT 'a','b','b'
DECLARE @tbl2 TABLE(PNum VARCHAR,PType NVARCHAR(100))
INSERT INTO @tbl2
SELECT 'a','car' UNION ALL
SELECT 'b','truck' UNION ALL
SELECT 'c','car'
Я изучаю PIVOT, но мне трудно понять, как его реализовать (особенно с помощью конверсионного элемента). Я думал о попытке сначала вставить набор столбцов только для преобразования значений (например, «P1_converted»), а затем попытаться суммировать их, но моя фактическая таблица имеет 10 столбцов этого типа, и я не хотел добавлять дополнительные 10 столбцов к столу, если есть более простой способ. Есть предположения? Благодаря!
Я использую SQL Server 2008.
Вы можете нормализовать свой стол? – Kermit
Если вы не понимаете, комментируя комментарий PolishPrince, я слышал хорошие вещи о книге «Дизайн базы данных для простых смертных». –
Также [остановите объявление столбцов, переменных, параметров и т. Д. Как 'VARCHAR' без длины] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/09/bad-habits-to-kick-declaring -varchar-без length.aspx). В этом случае вам повезло, что вам нужны только односимвольные значения в «P1, P2, P3». Попробуйте вставить '' xy'' в один из них. –