使用SQL Server将列转换为多行
这是我的表结构:
CREATE TABLE StudesntMarkList
(
StudentID int,
StudentName varchar(100),
Performance varchar(100),
class varchar(100),
Section varchar(100),
subject1 varchar(100),
subjectmark1 varchar(100),
subject2 varchar(100),
subjectmark2 varchar(100),
subject3 varchar(100),
subjectmark3 varchar(100),
subject4 varchar(100),
subjectmark4 varchar(100),
subject5 varchar(100),
subjectmark5 varchar(100),
subject6 varchar(100),
subjectmark6 varchar(100)
)
插入一些值:
INSERT INTO StudesntMarkList
VALUES (1, 'shiva', 'not bad', '10th', 'C', 'science', 58, 'social', '', 'english', 70, 'maths', '', 'biology', 67, '', 58)
我有一个看起来像这样的表:
Student ID|Student Name|Performance|class|Section|subject1 |subject mark1|subject2|subject mark2|subject3|subject mark3|subject4|subject mark4|subject5|subject mark5|subject6|subject mark6|
1 |shiva |not bad |10th |c |science |58 |Social | |English |70 |maths | |biology |67 | |50 |
我对我用来获取以下结果集的SQL查询感到困惑:
id|att |att val|Val
--+-------------+-------+----
1 |Student Name |Shiva |
1 |Performance |not bad|
1 |class |10th |
1 |Section |c |
1 |subject1 |science|58
1 |subject2 |Social |
1 |subject3 |English|70
1 |subject4 |maths |
1 |subject5 |biology|67
1 |subject6 | |50
这是可能的吗?
请帮助我解决这个问题,谢谢
This is my table structure:
CREATE TABLE StudesntMarkList
(
StudentID int,
StudentName varchar(100),
Performance varchar(100),
class varchar(100),
Section varchar(100),
subject1 varchar(100),
subjectmark1 varchar(100),
subject2 varchar(100),
subjectmark2 varchar(100),
subject3 varchar(100),
subjectmark3 varchar(100),
subject4 varchar(100),
subjectmark4 varchar(100),
subject5 varchar(100),
subjectmark5 varchar(100),
subject6 varchar(100),
subjectmark6 varchar(100)
)
Inserting some values:
INSERT INTO StudesntMarkList
VALUES (1, 'shiva', 'not bad', '10th', 'C', 'science', 58, 'social', '', 'english', 70, 'maths', '', 'biology', 67, '', 58)
I have a table that looks like this:
Student ID|Student Name|Performance|class|Section|subject1 |subject mark1|subject2|subject mark2|subject3|subject mark3|subject4|subject mark4|subject5|subject mark5|subject6|subject mark6|
1 |shiva |not bad |10th |c |science |58 |Social | |English |70 |maths | |biology |67 | |50 |
I'm stumped as to what SQL query I'd use to acquire the following result set:
id|att |att val|Val
--+-------------+-------+----
1 |Student Name |Shiva |
1 |Performance |not bad|
1 |class |10th |
1 |Section |c |
1 |subject1 |science|58
1 |subject2 |Social |
1 |subject3 |English|70
1 |subject4 |maths |
1 |subject5 |biology|67
1 |subject6 | |50
Is this possible?
Kindly help me to solve this, thanks in advance
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我建议您重新设计表格架构和商店策略,我认为它可能需要进行归一化,而不是创建许多列来存储数据。
如果您想从原始表达到期望结果,我们可以尝试使用
交叉应用... value
sqlfiddle
I would suggest you redesign your table schema and store strategy, I think it might need to do normalization instead of create a lot of columns to store data.
If you want to get to your expect result from your original table, we can try to use
CROSS APPLY...VALUE
sqlfiddle
我们可以使用Undivot,但这只能成为一列的值。我们可以通过连接值来解决这个问题。
我们还可以加入2个未分明的表,但这会更重。
db<
We can use unpivot, but this only makes one column of values. We can get around this by concatenating the values.
We could also join 2 unpivoted table, but that would be heavier.
db<>fiddle here