2016-08-03 80 views
-2

我有一个像转换多个记录单记录使用SQL查询10个LAC数据

ID    paper_Code   Grade 
----------------------------------------------------------------- 
1    101     A+ 
1    102     B 
1    103     C+ 
2    102     D 
3    103     A 
2    105     B 
.... 

我需要输出像

Id   P1    P2   P3 
---------------------------------------------------------- 
1   101-A+   102-B   103-C+ 
2   102-D   105-B 
3   103-A 

表感谢您的合作。

+0

是否有你需要它在格式输出什么特别的原因?这些数据是如何呈现或使用的? SQL Pivots默认是静态的,因此您必须在查询中定义列P1,P2和P3,或者使用动态SQL来执行此操作。 –

+0

查找'PIVOT()',尝试使用它,并且如果在你尝试的代码后发生错误。这里是一个很好的开始http://sqlhints.com/2014/03/18/dynamic-pivot-in-sql-server/ – scsimon

+0

谢谢你marc_s的快速回复。好的枢轴查询对我来说并不重要。列值应根据特定ID的记录数量动态发布。我真正的桌子至少有10张lac唱片和300张纸质代码。所以,它应该是SQL中的一个动态查询或函数。提前致谢。 – Hossain

回答

0

假设你的测试数据库是这样的:

enter image description here

这里有选项,你可能感兴趣的:

SELECT PaperId, 
    MAX(CASE WHEN Val = '101 A+' THEN Val END) [101 A+], 
    MAX(CASE WHEN Val = '102 B' THEN Val END) [102 B], 
    MAX(CASE WHEN Val = '103 C+' THEN Val END) [103 C+], 
    MAX(CASE WHEN Val = '102 D' THEN Val END) [102 D] 

从纸质 GROUP BY PaperId

enter image description here

另一路:

SELECT Val, 
    MAX(CASE WHEN PaperId = 1 THEN 'yes' END) '1', 
    MAX(CASE WHEN PaperId = 2 THEN 'yes' END) '2', 
    MAX(CASE WHEN PaperId = 3 THEN 'yes' END) '3' 

从纸质 GROUP BY瓦尔

enter image description here

+0

感谢您lucas的快速回复。但是我的第一栏不是论文Id。这是学生证或注册号或卷号。我真正的桌子至少有10张lac唱片和300张纸质代码。所以,它应该是SQL中的一个动态查询或函数。提前致谢。 – Hossain

+0

这是否需要在SQL中完成? C#(作为例子)是你的朋友,更复杂的解决方案在后端代码中更容易完成。 – lucas

+0

谢谢你的男人。我为此解决方案开发了C#代码。但是对于过程10 lac记录来说耗费太多时间。所以,我需要Sql解决方案。 – Hossain