Кажется, я понял вашу точку зрения, упс. Вы переносите информацию в другую таблицу?
Но во-первых, заметка о моем использовании термина нормализации
First Normal Form
- Eliminate repeating groups in individual tables.
- Create a separate table for each set of related data.
- Identify each set of related data with a primary key.
Итак, ясно, я был неправ о нормализации. Ouch. Хорошо, что Я еще молод, а? :/
Я потратил некоторое время на переоценку этого (роковая ошибка, нет?), А также то, что ограничения SQL Server 2000
. Я нашел полезную компиляцию руководства SQL Server 2000, доступного по адресу redware - SQL SERVER Handbook.
Когда дело доходит до табличные выражения ... единственное, что кажется было subqueries
и views
, хотя ни один истинный Ранжирование функция не доступна (к счастью, вы можете создать Functions
).
Пока вы можете добавить значение через какой-то скоропись, почему?
- Вы по-прежнему будете разбор за стол, по крайней мере N х #Columns быть unpivoted. Никакой сложный шарнир (который не существовал в любом случае).
- Вместо использования каких-либо дорогостоящих курсовых,
SELECT
'C1' прост и легко модифицируется для строк.
- Вы хотите объединить таблицы, поэтому самым простым методом является
UNION ALL
.
- Вы можете запустить GROUP BY один раз после конкатенации.Простой и элегантный.
РЕШЕНИЕ:
SELECT memID
, Col
, SUM(C1) AS Count
FROM (
SELECT 'C1' AS [Col], memID, C1 FROM #Test2
UNION ALL SELECT 'C2' AS [Col], memID, C2 FROM #Test2
UNION ALL SELECT 'C3' AS [Col], memID, C3 FROM #Test2
UNION ALL SELECT 'C4' AS [Col], memID, C4 FROM #Test2
UNION ALL SELECT 'C5' AS [Col], memID, C5 FROM #Test2) AS A
GROUP BY memID, Col
ORDER BY memID ASC, Col ASC
Источник Таблица:
CREATE TABLE #Test2 (memID INT, C1 INT, C2 INT, C3 INT, C4 INT, C5 INT)
INSERT INTO #Test2 (memId, C1, C2, C3, C4, C5)
VALUES (123, 10, 20, 0, 40, 0)
, (123, 0, 20, 0, 40, 5)
, (122, 5, 20, 10, 15, 0)
, (122, 5, 0, 0, 0, 60)
, (155, 10, 0, 0, 10, 10)
, (155, 0, 0, 0, 50, 50)
Результаты:
memID Col Count
122 C1 10
122 C2 20
122 C3 10
122 C4 15
122 C5 60
123 C1 10
123 C2 40
123 C3 0
123 C4 80
123 C5 5
155 C1 10
155 C2 0
155 C3 0
155 C4 60
155 C5 60
Итак, я думаю, что ваша первоначальная идея была права. Cheers.
использовать стержень .....? –
Его SQL 2000 db и univot, похоже, не поддерживается –
Люди по-прежнему используют SQL2000 ?! Мои соболезнования ... – DavidG