使用SQL Server 2000 - 我有一个旧的数据库,并且没有规范化。
它有一堆列,如
memId
c1
c2
c3
c4
c5
这些列包含一个数字样本
123
10
20
0
40
0
123
0
20
0
40
5
我想要的是提取按照这个
的memId和列名分组的数据将出现
memId col total
123 c1 10
123 c2 40
123 c4 80
123 c5 5
其中数字是该组的总和
我想我可以每次拉动它们并将它们组合在一起,但是想知道是否有更简单的方法。
答案 0 :(得分:1)
听起来你想unpivot
你的结果。您的数据库的一个选项是union all
:
select memId, 'c1' as col, sum(c1) from yourtable group by memId, col
union all
select memId, 'c2' as col, sum(c2) from yourtable group by memId, col
union all
select memId, 'c3' as col, sum(c3) from yourtable group by memId, col
union all
select memId, 'c4' as col, sum(c4) from yourtable group by memId, col
union all
select memId, 'c5' as col, sum(c5) from yourtable group by memId, col
答案 1 :(得分:-1)
我似乎误解了你的观点,哎呀。您是将信息迁移到另一个表吗?
但首先,关于我使用术语标准化的说明
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.
显然我对规范化是错误的。 哎哟。好事 我还年轻,是吗? :/
我花了一些时间重新评估这个(一个致命的错误,不是吗?)以及SQL Server 2000
的限制。我在redware - SQL SERVER Handbook上找到了一个有用的SQL Server 2000手册汇编。
当谈到表达式时......唯一出现的是subqueries
和views
,虽然没有真正的排名功能(谢天谢地,你可以创建Functions
)。
虽然可以通过某种草书添加值,但为什么呢?
SELECT
'C1'不是使用任何昂贵的草书,而是简单且易于修改为行。UNION ALL
。<强> SOLUTION:强>
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
所以我认为你最初的想法是正确的。 欢呼声。