[asp.net]自定义查询结果

发布时间: 2017/3/26 2:33:11
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有 3 表

  1. tblIndividual
  2. tblIndividualSpeciality
  3. tblSpeciality

一个人有多个专业,我写的时候我得到很多行的查询取决于个人专业数目。 我需要在单记录行和每个专业有单个列。

这是表结构

enter image description here

我的查询

SELECT FirstName,LastName,SpecialtyName
FROM tblindividual ind,tblspecialty spec, tblindividualspecialty indspec    
where 
ind.pkIndividualID = indspec.fkIndividualID
and spec.SpecialtyCode = indspec.SpecialtyCode
and pkIndividualID = 355735;

我收到了这种格式作为结果

enter image description here

但我需要这种格式作为结果

enter image description here

一些人还能不能帮我。 我作为视觉studio 2013年使用 MySql 数据库和开发工具。

解决方法 1:

你的部分原因是问题的 MySQL 目前没有相应的 SQL 的枢纽性、 和克服,它也没有一种内置的 ROWNUM 概念。

我创建表与两个单独的个人,四个专业,其中第一个个体在社会中 3,第二个有 2。我结合了这些入临时表 (如果你喜欢的临时表) 使用

INSERT INTO InterimResults
(
SELECT @row_number:=CASE WHEN @indId=pkIndividualId
                    THEN @row_number+1 ELSE 1 END AS row_number,
       @indId:=pkIndividualId AS pkIndividualId, FirstName, LastName,
       SpecialityName
FROM (SELECT @rownum:=0) n, 
     (SELECT @db_names:='') d, 
     (SELECT pkIndividualId,FirstName,LastName,SpecialityName
      FROM tblindividual ind
      inner join tblindividualspeciality indspec on ind.pkIndividualId=indspec.fkIndividualId
      inner join tblspeciality spec on spec.pkSpecialityCode=indspec.fkSpecialityCode) r
);

这给了我以下结果 (以我的测试数据)。注意︰ 如果您运行这在 SQLFiddle 的"生成架构"窗格中所有的行号为 1,出来但查询工作正常"运行 Sql"面板中。

row_number pkIndividualId FirstName LastName   SpecialityName
1          1              Test      I-Health   Internal Medecine 
2          1              Test      I-Health   Family Practise 
3          1              Test      I-Health   Cardiology 
1          2              Test2     J-Health   Family Practise 
2          2              Test2     J-Health   Obstetrics 

它是然后很容易就能"透视"使用 GROUP_CONCAT 此临时表

SELECT  
  FirstName, LastName,  
  GROUP_CONCAT(if(row_number = 1, SpecialityName, NULL)) AS 'Speciality1', 
  GROUP_CONCAT(if(row_number = 2, SpecialityName, NULL)) AS 'Speciality2', 
  GROUP_CONCAT(if(row_number = 3, SpecialityName, NULL)) AS 'Speciality3' 
FROM InterimResults 
GROUP BY pkIndividualId;

我使用的引用︰ http://www.artfulsoftware.com/infotree/qrytip.php?id=78http://blog.sqlauthority.com/2014/03/09/mysql-reset-row-number-for-each-group-partition-by-row-number/

当然这假定你只想要报告的第一次 3 的特殊性,或每个人只能有达 3 专长-如果有其他人那么你将需要使用预准备的语句和动态 sql-那里是示例在 http://stratosprovatopoulos.com/web-development/mysql/pivot-table-with-dynamic-columns/

赞助商