SQL查询语法:分组列值

时间:2011-12-22 14:52:24

标签: sql sql-server-2008-r2

举个例子,假设我的数据集成立:

EMPLOYEE_ID
EMPLOYEE_NAME
EMPLOYEE_ACCT_ID
EMPLOYEE_ACCT_TYPE
EMPLOYEE_ACCT_BALANCE

我想以下列方式呈现数据:

EMPLOYEE   |   CHECKING   |   SAVINGS    |   INVESSTMENT   |   XMAS   |
_______________________________________________________________________

Mary       |     100.00   |     700.00   |      3,000.00   |    175.00
Jim        |     850.00   |     600.00   |      1,500.00   |      0.00

TOTAL      |     950.00   |    1,300.00  |      4,500.00   |    175.00

我遇到的问题是如何将EMPLOYEE_ACCT_TYPE划分为列,每个帐户类型值都列在其余额中。提前谢谢。

2 个答案:

答案 0 :(得分:1)

你要做的是一个叫做Pivot的人。某些系统(例如SQL Server)在SQL中对此具有本机支持,但前提是您事先知道列数(即,您必须将帐户类型硬编码到SQL中)。其他系统不支持本地转动(例如MySQL),因此您需要编写存储过程或一些动态SQL来执行此操作。

既然你没有提到你正在使用的DBMS,那就是我能得到的具体内容。

答案 1 :(得分:0)

首先,我觉得你需要做一些严肃的规范化。将employee_account数据分解到自己的表中:

表:employee_account_data

EMPLOYEE_ACCT_ID int
EMPLOYEE_ACCT_TYPE varchar(15)
EMPLOYEE_ACCT_BALANCE decimal

您还需要一个桥接表,因为许多员工可以拥有多个帐户(多对多):

table:employee_account_lookup

EMPLOYEE_ID int
EMPLOYEE_ACCT_ID int

这样,您就不会为每种帐户类型重复employee_name(因为我怀疑您现在是这样)。如果您真的想要很好地规范化,您还可以创建一个表来保存不同的员工帐户类型。这样你就不必担心有人在数据录入时错误地“检查”或“储蓄”。