C# SQL垂直显示表

C# SQL垂直显示表,c#,mysql,sql,C#,Mysql,Sql,我正在使用C#和MySQL作为(DBMS)我想旋转我的表。这是我的疑问: SELECT p.gender,Count(CASE WHEN disease like '%Anemia%' THEN 1 END) AS 'Anemia' ,Count(CASE WHEN disease like '%Injuries%' THEN 1 END) AS 'Injuries' FROM phc_db.record r, phc_db.patient p where r.malteser

我正在使用C#和MySQL作为(DBMS)我想旋转我的表。这是我的疑问:

SELECT  p.gender,Count(CASE WHEN disease like '%Anemia%' THEN 1 END) AS 'Anemia'
       ,Count(CASE WHEN disease like '%Injuries%' THEN 1 END) AS 'Injuries'
FROM  phc_db.record r, phc_db.patient p
where r.malteser_id=p.malteser_id
group by p.gender
结果是:

Gender  Anemia  Injuries
------------------------
Female  1   0

Male    2   1
------------------------
我想:

Disease  Male   Female
----------------------

Anemia   2      1

Injuries 1      0
----------------------
有什么想法吗?有什么建议吗? 感谢您交换聚合:

SELECT
    (CASE WHEN disease LIKE '%Anemia%'   THEN 'Anemia'
          WHEN disease like '%Injuries%' THEN 'Injury'
     END) AS disease,
     SUM (p.gender = 'Female') AS females,
     SUM (p.gender = 'Male')   AS males
FROM phc_db.record r
INNER JOIN phc_db.patient p
     ON r.malteser_id = p.malteser_id
WHERE disease REGEXP 'Anemia|Injuries'
GROUP BY disease;
交换聚合:

SELECT
    (CASE WHEN disease LIKE '%Anemia%'   THEN 'Anemia'
          WHEN disease like '%Injuries%' THEN 'Injury'
     END) AS disease,
     SUM (p.gender = 'Female') AS females,
     SUM (p.gender = 'Male')   AS males
FROM phc_db.record r
INNER JOIN phc_db.patient p
     ON r.malteser_id = p.malteser_id
WHERE disease REGEXP 'Anemia|Injuries'
GROUP BY disease;

你可以试着以疾病为中心,而不是以性别为中心。在本例中,gender变为列

SELECT
    disease,
    SUM(CASE WHEN p.gender = 'Male'   THEN 1 END) AS Male,
    SUM(CASE WHEN p.gender = 'Female' THEN 1 END) AS Female
FROM phc_db.record r
INNER JOIN phc_db.patient p
    ON r.malteser_id = p.malteser_id
GROUP BY disease
WHERE disease IN ('Anemia', 'Injuries')

请注意,从您当前的输出来看,您可能不需要像使用一样使用来匹配疾病。在我上面的查询中,我检查了贫血和损伤的确切疾病名称。如果我的假设是错误的,那么你可以像

那样把注意力放在疾病而不是性别上。在本例中,gender变为列

SELECT
    disease,
    SUM(CASE WHEN p.gender = 'Male'   THEN 1 END) AS Male,
    SUM(CASE WHEN p.gender = 'Female' THEN 1 END) AS Female
FROM phc_db.record r
INNER JOIN phc_db.patient p
    ON r.malteser_id = p.malteser_id
GROUP BY disease
WHERE disease IN ('Anemia', 'Injuries')
请注意,从您当前的输出来看,您可能不需要像使用一样使用来匹配疾病。在我上面的查询中,我检查了贫血和损伤的确切疾病名称。如果我假设错了,那么你可以像

那样用c做,通过下面的查询得到所有的疾病

SELECT  p.gender, disease
FROM  phc_db.record r, phc_db.patient p
where r.malteser_id=p.malteser_id
使用下面的c#

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dt=新的DataTable();
添加(“性别”,类型(字符串));
添加(“疾病”,类型(字符串));
Add(新对象[]{“男性”,“贫血”});
Add(新对象[]{“女性”,“贫血”});
Add(新对象[]{“男性”,“贫血”});
Add(新对象[]{“女性”,“贫血”});
Add(新对象[]{“男性”,“贫血”});
添加(新对象[]{“男性”,“伤害”});
添加(新对象[]{“女性”,“伤害”});
添加(新对象[]{“男性”,“伤害”});
添加(新对象[]{“女性”,“伤害”});
string[]uniqueDieses=dt.AsEnumerable().Select(x=>x.Field(“Disease”)).Distinct().ToArray();
DataTable pivot=新DataTable();
添加(“疾病”,typeof(string));
pivot.Columns.Add(“男性”,typeof(int));
pivot.Columns.Add(“女性”,typeof(int));
变量组=dt.AsEnumerable()
.GroupBy(x=>x.Field(“疾病”))。选择(x=>new
{
疾病=x.钥匙,
男性=x.其中(y=>y.字段(“性别”)==“男性”).Count(),
女性=x.其中(y=>y.字段(“性别”)==“女性”).Count()
}).ToList();
foreach(组中的var组)
{
添加(新对象[]{group.disease,group.male,group.female});
}
}
}
}
您可以在c#中执行以下查询,该查询将获得所有疾病

SELECT  p.gender, disease
FROM  phc_db.record r, phc_db.patient p
where r.malteser_id=p.malteser_id
使用下面的c#

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用系统数据;
命名空间控制台应用程序1
{
班级计划
{
静态void Main(字符串[]参数)
{
DataTable dt=新的DataTable();
添加(“性别”,类型(字符串));
添加(“疾病”,类型(字符串));
Add(新对象[]{“男性”,“贫血”});
Add(新对象[]{“女性”,“贫血”});
Add(新对象[]{“男性”,“贫血”});
Add(新对象[]{“女性”,“贫血”});
Add(新对象[]{“男性”,“贫血”});
添加(新对象[]{“男性”,“伤害”});
添加(新对象[]{“女性”,“伤害”});
添加(新对象[]{“男性”,“伤害”});
添加(新对象[]{“女性”,“伤害”});
string[]uniqueDieses=dt.AsEnumerable().Select(x=>x.Field(“Disease”)).Distinct().ToArray();
DataTable pivot=新DataTable();
添加(“疾病”,typeof(string));
pivot.Columns.Add(“男性”,typeof(int));
pivot.Columns.Add(“女性”,typeof(int));
变量组=dt.AsEnumerable()
.GroupBy(x=>x.Field(“疾病”))。选择(x=>new
{
疾病=x.钥匙,
男性=x.其中(y=>y.字段(“性别”)==“男性”).Count(),
女性=x.其中(y=>y.字段(“性别”)==“女性”).Count()
}).ToList();
foreach(组中的var组)
{
添加(新对象[]{group.disease,group.male,group.female});
}
}
}
}

非常感谢,它看起来很好看,但问题是我想使用
like
因为这个字符
%
因为这个字符
%
可以使用
like
吗,或者你想不想使用
%
而不使用
比如
@hogerqassim如果你真的需要在这里使用
比如
,请看Gordon的答案。非常感谢,看起来不错,但是问题是我想用
因为这个字符
%
因为这个字符
%
所以可以用
吗?或者你有没有办法不用
@hogerqassim就用
%
,看看戈登的答案,如果你真的需要用