如何在 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 小时前进行比较?

如何在 sql server 2008r2 中将行名更改为列名

Sql server 中将数据行转列列转行