我有3张桌子
tblIndividual
tblIndividualSpeciality
tblSpeciality
一个人有多个专业,当我写查询时,我得到很多行取决于个人的专业数量。 我需要单行记录,每个专业都有单列。
这是表结构
我的查询
SELECT FirstName,LastName,SpecialtyName
FROM tblindividual ind,tblspecialty spec, tblindividualspecialty indspec
where
ind.pkIndividualID = indspec.fkIndividualID
and spec.SpecialtyCode = indspec.SpecialtyCode
and pkIndividualID = 355735;
我收到了这种格式
但我需要这种格式作为结果
有人可以帮助我吗? 我使用MySql数据库和开发工具作为Visual Studio 2013。
答案 0 :(得分:0)
使用PIVOT查询。
以上链接供您参考。
http://forums.asp.net/t/1851916.aspx?Converting+Column+values+to+Rows+in+SQL+Query
此链接对您有所帮助。
我希望你解决了你的问题。
答案 1 :(得分:0)
SELECT FirstName, LastName, SpecialtyName
FROM tblindividual T1,tblspecialty T2, tblindividualspecialty T3
WHERE T1.pkIndividualID = T3.fkIndividualID AND T2.SpecialtyCode =T3.SpecialtyCode AND pkIndividualID = 355735;
答案 2 :(得分:0)
你的部分问题是MySQL目前没有相当于SQL的PIVOT,并且在克服它时它也没有内置的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" Build Schema"窗格所有行号都显示为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
然后很简单#" pivot"这个临时表使用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=78 和http://blog.sqlauthority.com/2014/03/09/mysql-reset-row-number-for-each-group-partition-by-row-number/
当然这假设您只想报告前3个专业,或者每个人最多只能有3个专业 - 如果还有其他专业那么您需要使用Prepared语句和动态SQL - 有一个例子at http://stratosprovatopoulos.com/web-development/mysql/pivot-table-with-dynamic-columns/