【发布时间】:2018-01-23 10:25:09
【问题描述】:
我有一个正在我的应用程序中使用的查询。我不得不对它进行一个小的编辑(选择一个额外的列),现在我这样做了,我没有得到相同的结果,因此我得到了一个错误的文件。举个例子,这就是查询的样子......
Select
'X' = tblA.VendorNumber,
'Y' = tblB.Label,
'Z' = tblC.InvoiceNo,
'W' = tblD.Checks,
From //Doing some joins here
Group By
tblA.VendorNumber, tblB.label, tblc.InvoiceNo, tblD.Checks
结果集为我提供了许多记录,但按具有相同 X、Y、Z、W 的记录进行分组 - 所以没有 Group By 它看起来像这样
X Y Z W
-----------------------------------------------------------
123 Anton 772 0
123 Anton 772 0
显然,随着 group by 他们被卷成一个...
当我尝试在我的 Select 查询中包含一个附加列时,问题就出现了。我需要这个查询,因为我需要在我的代码中赋值才能区分它是什么类型的记录。对于新列,这两行数据不相同,因此不会汇总。
有没有办法让我以某种方式添加一个额外的列,但不显示它,并将其从Group By 中排除?
这就是我的意思
Select
'X' = tblA.VendorNumber,
'Y' = tblB.Label,
'Z' = tblC.InvoiceNo,
'W' = tblD.Checks,
'P' = tblC.Proc -- New column
From //Doing some joins here
Group By
tblA.VendorNumber, tblB.label, tblc.InvoiceNo, tblD.Checks,
tblC.Proc -- New column
在这种情况下,数据如下所示
X Y Z W P
---------------------------------------------------------------------
123 Anton 772 0 FPN
123 Anton 772 0 PPN
现在 P 对于之前汇总为一个的 2 条记录是不同的,有没有办法让我以某种方式不显示 P,但是,仍然能够从我的记录集中获取它的值。如果在这一查询中没有选择“P”,我将无法选择它,并且由于两条记录没有汇总,我遇到了一些重大问题。
基本上我需要选择“P”,但不将其包含在我的结果集或分组依据中。
任何帮助将不胜感激。
【问题讨论】:
-
如果每一行的值都不同,并且您仍然希望它们汇总成一行,那么处理器应该如何决定将两个不同值中的哪一个包含在汇总行中?不,您不能在一个结果集中执行此操作。您需要对其他非汇总结果集执行单独的查询。或者,如果您只想将
P记录汇总起来,只需添加只汇总P行的 Where 子句。 -
不使用聚合函数时为什么要 GROUP BY?您是否尝试执行 SELECT DISTINCT?
-
“我需要选择'P'但不将其包含在我的结果集中”是什么意思?您认为选择某些内容并将其包含在结果集中有什么区别?从样本数据中添加您想要的结果可能会有所帮助。如果你想“从你的记录集中获得它的价值”,你希望它是什么价值?
标签: sql sql-server-2012 group-by