我的数据库的表结构如下:
数据库结构
我的目标是输出每一行tblèu therapeuten(他们是我的员工)和他们的培训名称(德语“fortbildung”)。培训的名称存储在tbl\ U中,以供学习。每个员工所接受的培训都储存在tbl\ U therapeut\ U进行培养。对于输出,我要显示培训的名称,而不是id。如下所示:
输出
我正在用c#,sql server编程。首先我试了一下:
string sSQL = "SELECT t.*, STRING_AGG(tf.Id_Fortbildung, ';') AS Fortbildungen " +
"FROM tbl_Therapeuten t " +
"FULL OUTER JOIN tbl_Therapeut_Fortbildung tf on t.Id = tf.Id_Therapeut ";
但这会带来一个错误,其中包含我没有在聚合函数或GROUPBY子句中使用tbl\u therapeuten.id。
接下来我尝试了这个:
string sSQL = "SELECT t.Id, t.Nachname, STRING_AGG(tf.Id_Fortbildung, ';') AS Fortbildungen " +
"FROM tbl_Therapeuten t " +
"FULL OUTER JOIN tbl_Therapeut_Fortbildung tf on t.Id = tf.Id_Therapeut " +
"GROUP BY t.Id, t.Nachname";
这是有效的(除了显示训练的名称,但是显示id),但是我不想显式地命名tbl\u therapeuten的每一列。我想用“t*”。但这是行不通的:
string sSQL = "SELECT t.*, STRING_AGG(tf.Id_Fortbildung, ';') AS Fortbildungen " +
"FROM tbl_Therapeuten t " +
"FULL OUTER JOIN tbl_Therapeut_Fortbildung tf on t.Id = tf.Id_Therapeut " +
"GROUP BY t.*";
所以我需要一些帮助:)
我也不知道如何显示培训的名称而不是id。
谢谢你的帮助!
2条答案
按热度按时间js4nwp541#
您可能会发现相关子查询提供了更好的性能(通过避免外部聚合),并允许您避免列出所有列
t
:ykejflvf2#
我想这就是你需要的。
据我所知,SQLServer不支持GROUPBY*,因此必须指定列名。