我需要获取系统中所有活动的列表。一个Activity可以有1个:管理活动的许多服务提供者 - 所以我有一个Ativity表,有多对多的链接表(ActivityServiceProvider)和一个服务提供者列表。
获取数据的查询如下所示。
SELECT a.id, sp.Description
FROM Activity a
INNER JOIN dbo.ActivityServiceProvider asp
ON asp.ActivityID = a.ID
INNER JOIN dbo.ServiceProvider sp
ON sp.ID = asp.ServiceProviderID
但由于每个活动可能有多个服务提供者,我需要以某种方式使用STUFF将服务提供者列表放入单行列中。
我尝试了这个,但它失败了,jsut返回了一行:
SELECT
STUFF((
SELECT a.ID, ', ' + MAX(sp.Description)
FROM Activity a
INNER JOIN dbo.ActivityServiceProvider asp
ON asp.ActivityID = a.ID
INNER JOIN dbo.ServiceProvider sp
ON sp.ID = asp.ServiceProviderID
GROUP BY a.ID
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
,1,2,'') AS NameValues
有人能发现这个问题吗? 'STUFF'和FOR XML关键字使我感到困惑,所以我可能会犯一个基本错误,但我试图返回一个ActivityID和一个ServiceProviders列,并使用逗号分隔的服务提供者列表。
答案 0 :(得分:2)
您需要外部查询来获取每个活动。然后子查询合并每个描述的结果。子查询中不需要聚合 - public void buttonClick2(View view) {
TextView textView1 = (TextView)findViewById(R.id.word);
TextView textView2 = (TextView)findViewById(R.id.definition);
TextView textView3 = (TextView)findViewById(R.id.definition2);
TextView textView4 = (TextView)findViewById(R.id.definition3);
boolean hasDefinition2 = false;
if (textView3 !=null){
String text3 = textView3.getText().toString();
if(text3 !=null && !text3.isEmpty()){
hasDefinition2 = true;
}
}
String def2 ="";
if(hasDefinition2){
def2 +="\n Definition 2: "+textView3.getText().toString();
}
boolean hasDefinition3 = false;
if (textView4 !=null){
String text4 = textView4.getText().toString();
if(text4 !=null && !text4.isEmpty()){
hasDefinition3 = true;
}
}
String def3 ="";
if(hasDefinition3){
def3 +="\n Definition 3: "+textView4.getText().toString();
}
Intent shareIntent1 = new Intent(android.content.Intent.ACTION_SEND);
shareIntent1.setAction(android.content.Intent.ACTION_SEND);
shareIntent1.setType("text/plain");
shareIntent1.putExtra(android.content.Intent.EXTRA_SUBJECT, "Word"); //<=adding blank quotes
shareIntent1.putExtra(Intent.EXTRA_TEXT, textView1.getText().toString()+
"\n"+Definition: +textView2.getText().toString()+
"\n"+def2+
"\n"+def3+
"\n"+"\n"+"@2016 Dictionary"+
"\n"+"Visit us:");
startActivity(Intent.createChooser(shareIntent1, "Share"));
}
负责:
FOR XML PATH()