如何在查询结果中添加独立列

时间:2015-11-25 18:50:08

标签: sql sql-server

我尝试使用Google搜索此问题但仍无法找到解决方案。 我有2列合并如下:

第一张表:

ID  Name    Item
42  america 1433
42  america 1695
42  america 1234
8   london  1433
8   london  1705
8   london  1432

第二张表:

ID  CreatedBy
42  John
42  Erica
8   Amy Song
8   Alfred

如果我只是加入两个表,它将变成这样:

ID  Name    Item    CreatedBy
42  america 1433    John
42  america 1695    John
42  america 1234    John
42  america 1433    Erica
42  america 1695    Erica
42  america 1234    Erica
8   london  1433    Amy Song
8   london  1705    Amy Song
8   london  1432    Amy Song
8   london  1433    Alfred
8   london  1705    Alfred
8   london  1432    Alfred

创建的列仅与ID相关,与Name和Item无关。 我只想将CreatedBy作为新列插入到仅链接到ID的第一个表中,因此预期结果如下所示。 有什么方法可以得到这样的结果吗?

ID  Name    Item    CreatedBy
42  america 1433    John
42  america 1695    Erica
42  america 1234    NULL
8   london  1433    Amy Song
8   london  1705    Alfred
8   london  1432    NULL

假设我们改变了第二个表:

第二张表:

ID  CreatedBy
42  John
8   Amy Song

结果将如下:

ID  Name    Item    CreatedBy
42  america 1433    John
42  america 1695    NULL
42  america 1234    NULL
8   london  1433    Amy Song
8   london  1705    NULL
8   london  1432    NULL

我非常感谢您的帮助,并感谢您使用先进的乳房。

注意:列CreatedBy是仅与ID相关且与Name和Item无关的独立列。

1 个答案:

答案 0 :(得分:1)

所以,我会回答你,即使有些人在评论中讨论它可能会有不同意见,因为你的问题没有合适的逻辑。

请务必注意,此答案适用于此特定情况,如果它无法为您提供更大数据集的正确数据,则必须提供更多信息。

我做了什么:

我已经从第一个集合中创建了一个子集,并按name对其进行排序(并将其编入索引,窗口函数),然后我创建了第二个集合中的另一个子集,由id对其进行排序,因此,我有:

select id, name, item, row_number() over (partition by name order by name) idx from tablea

并且

select id, createdby, row_number() over (partition by id order by id) idx from tableb

然后我将tableatableb id联系起来idx,订单创建了列select a.id, a.name, a.item, b.createdby from (select id, name, item, row_number() over (partition by name order by name) idx from tablea) a left join (select id, createdby, row_number() over (partition by id order by id) idx from tableb) b on (a.id = b.id and a.idx=b.idx) order by a.name 所以

order by

$(document).ready(function () { var table = $('#DataLegal').DataTable({ "paging": true }); $('a.toggle-vis').on('click', function (e) { event.preventDefault ? event.preventDefault() : event.returnValue = false; //Get the column API object var column = table.column($(this).attr('data-column')); // Toggle the visibility column.visible(!column.visible()); }); var ms = $('#magicsuggest').magicSuggest({ // Converts our C# object in a JSON string. data: @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(columns)) }); $(ms).on('selectionchange', function(e,m){ // Turn on ALL columns... Like a reset... $.each(table.columns()[0], function(index) { table.column(index).visible(true); }); // Turn off each column in the value array... Value = int[0, 1, 2, ...] $.each(this.getValue(), function(index, item) { table.column(item).visible(false); }); }); }); 只是为了得到您在问题上提出的结果。

请在此处查看:http://sqlfiddle.com/#!3/7ef70/3

对于您的第二个示例数据:http://sqlfiddle.com/#!3/675625/1