如何在SQL中简单地使用行切换列?是否有任何简单的转置命令?
即转此结果:
Paul | John | Tim | Eric
Red 1 5 1 3
Green 8 4 3 5
Blue 2 2 9 1
Run Code Online (Sandbox Code Playgroud)
进入这个:
Red | Green | Blue
Paul 1 8 2
John 5 4 2
Tim 1 3 9
Eric 3 5 1
Run Code Online (Sandbox Code Playgroud)
PIVOT 这种情况看起来太复杂了.
我正在使用Microsoft SQL Server 2008.
我有一个看起来像这样的表:
|======================================================|
| RespondentId | QuestionId | AnswerValue | ColumnName |
|======================================================|
| P123 | 1 | Y | CanBathe |
|------------------------------------------------------|
| P123 | 2 | 3 | TimesADay |
|------------------------------------------------------|
| P123 | 3 | 1.00 | SoapPrice |
|------------------------------------------------------|
| P465 | 1 | Y | CanBathe |
|------------------------------------------------------|
| P465 | 2 | 1 | TimesADay |
|------------------------------------------------------|
| P465 | 3 | 0.99 | SoapPrice |
|------------------------------------------------------|
| P901 | 1 …Run Code Online (Sandbox Code Playgroud) 我有一个staff包含工作人员,数据库user_no和user_name列的数据库表.我有另一个department表,其中包含工作人员可以成为,包含dept_no和dept_name作为列的部门.
因为工作人员可以是多个部门的成员,所以我有第三个,staff_dept包含user_no列和dept_no列的表,这是其他两个表的主键.此表显示每个员工所属的部门,并为每个用户/部门交叉点包含一行.
我希望以电子表格的形式输出一个输出(CSV文件,无论如何;我将把结果变成一个可用的形式,我得到它们后),每个部门有一列,每行一列用户,X出现在每个交叉点,如中所定义staff_dept.
我可以编写一个SQL查询来实现这个结果吗?或者我必须做一些"真正的"编程(因为它不是一个"真正的"程序,直到你嵌套了三个或四个for循环,显然)来收集和格式化这些数据?