如何在 SQL Server 或 C# 代码中将行转换为列
Posted
技术标签:
【中文标题】如何在 SQL Server 或 C# 代码中将行转换为列【英文标题】:How to convert rows into columns in SQL Server or in C# code behind 【发布时间】:2022-01-12 20:39:02 【问题描述】:我不知道如何做到这一点,我已经在另一篇文章中尝试了枢轴答案但不起作用,或者我对如何构建查询感到困惑。来自多连接表的数据。
Questions
table - (每个会话的问题都是动态的)
qid | Question | order |
---|---|---|
1 | Do you like to play? | 1 |
2 | Do you have a car? | 2 |
3 | Do you have a job? | 3 |
Participant
表:
id | empID | participant | surveyYr |
---|---|---|---|
1 | e123 | Tony | 2021 |
2 | e456 | John | 2021 |
3 | e789 | Leo | 2021 |
Answers
表(答案可以为空):
id | pid | Answer | qid_fk |
---|---|---|---|
1 | 1 | Yes | 1 |
2 | 1 | No | 2 |
3 | 1 | Yes | 3 |
4 | 2 | Yes | 1 |
5 | 2 | NULL | 2 |
6 | 2 | NULL | 3 |
7 | 3 | Yes | 1 |
8 | 3 | Yes | 2 |
9 | 4 | Yes | 3 |
查询
Select
q.question, a.answer, p.empID, p.participant
From
questions q
Left Join
answers a on a.questionID_fk = q.qid
Left Join
participant p on p.id = a.pid
输出:
question | answer | empID | participant |
---|---|---|---|
Do you like to play? | Yes | e123 | Tony |
Do you have a car? | No | e123 | Tony |
Do you have a job? | Yes | e123 | Tony |
Do you like to play? | Yes | e456 | John |
Do you have a car? | NULL | e456 | John |
Do you have a job? | NULL | e456 | John |
Do you like to play? | Yes | e789 | Leo |
Do you have a car? | Yes | e789 | Leo |
Do you have a job? | Yes | e789 | Leo |
转换后的预期输出:
EmpID | participant | Do you like to play? | Do you have a car? | Do you have a job? |
---|---|---|---|---|
e123 | Tony | Yes | No | Yes |
e456 | John | Yes | NULL | NULL |
e789 | Leo | Yes | Yes | Yes |
这在 T-SQL 中可行吗?或者后面的代码有解决方法吗?我也将使用 datatable js 库来输出这个。
【问题讨论】:
【参考方案1】:您可以在 SQL Server 中使用 pivot
运算符。
如果您想进一步了解pivot
的工作原理,请查看此链接:https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-ver15
要在 c# linq 查询中使用 pivot
,请遵循以下问题:Is it possible to Pivot data using LINQ?
【讨论】:
请不要将链接作为答案发布,将相关部分复制到答案的文本中并解释其相关性。链接可能会中断,然后您的答案对未来的读者毫无用处。 我猜你是对的,但是搜索 Pivot 可以解决问题。这些链接是附加信息以上是关于如何在 SQL Server 或 C# 代码中将行转换为列的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 C# 中将访问数据库(.mdb)导入 sql server 2008
在 C# 中将十六进制值从 SQL Server 转换为日期时间
如何在 SQL Server 2008 中将行切换到列,反之亦然
如何在 SQL Server 中将纪元时间与 24 小时前进行比较?