在我熟悉的数据库中,列出父母和孩子的查询看起来像这样:
Parfirst ParLast Childfirst
玛丽·史密斯·莎莉
玛丽·史密斯·吉姆
玛丽·史密斯·金
但是,有人要求我创建一个如下所示的报告:
Parfirst ParLast Child1 Child2 Child3 Child4
玛丽·史密斯·莎莉·吉姆·金
我对如何做到这一点不知所措。欢迎任何建议。
答案 0 :(得分:0)
您可以使用STRING_AGG函数(如果使用的是SQL Server 2017或更高版本)执行此操作,也可以使用FOR XML进行一些难看的XML魔术操作:
function run_ajax(make) {
var results = $( '#results' );
var msg = "";
$.ajax({
type: 'get',
url: 'ajax.php',
data: make,
dataType: 'json',
beforeSend: function() {
console.log("Before Send");
},
success: function( response ) {
console.log("Success!");
for(var x in response) {
if(response[x].make == make) {
msg += response[x].model + "<br>";
}
}
if(msg == "") {
msg = "No matches found!";
}
document.getElementById("results").innerHTML = msg;
},
});
};
如果要在其自己的列中包括每个子名称,则必须在查询中定义这些列,如果定义的列数超过了该数目,则将无法返回任何其他子名称。像这样使用ROW_NUMBER:
SELECT t.ParFirst, t.ParLast, LEFT(t.Children, Len(t.Children)-1) As Children
FROM
(
SELECT DISTINCT p.ParFirst, p.ParLast,
(
SELECT c.ChildFirst + ',' AS [text()]
FROM dbo.Children c
WHERE c.ParentId = p.ParentId
ORDER BY c.ChildFirst
FOR XML PATH ('')
) l
FROM dbo.Parents p
) t
SELECT p.ParFirst, p.ParLast, STRING_ACC(c.ChildFirst, ',') as Children
FROM dbo.Parents p
LEFT JOIN dbo.Children c on c.ParentId = p.ParentId
GROUP BY p.ParFirst, p.ParLast