我一直在互联网上无处不在,找不到解决方案...... 目前我的SQL查询设置为“GROUP BY A”,因为它是产品规格列表。
List[Int]
我需要它分组(完全匹配)A,因为例如:
"SELECT A, B, C, ... FROM ... WHERE D>$variable AND E<$variable2 AND ... ... GROUP BY A";
^以上内容应分组,以便输出如下:
102001
102001
102001
102001
102001HS
102001HS
102001HS
^但是,目前使用“GROUP BY A”,它输出为:
102001
102001HS
这些是不同的部件号,但GROUP BY A在102001HS下分组102001,因此我的最终输出中没有102001的结果。
如果有人知道如何按照A的完全匹配分组,我将非常感激?非常感谢! (A是专栏)是SQL5.6.17
表格结构:
102001HS
答案 0 :(得分:0)
看起来A列对所有这些记录都有相同的值(因为输出中只得到一个结果)。见下文(最后一个查询):
declare @tbl table (value varchar(10), a varchar(3))
insert into @tbl values ('102001','xyz')
insert into @tbl values ('102001','xyz')
insert into @tbl values ('102001','xyz')
insert into @tbl values ('102001','xyz')
insert into @tbl values ('102001HS','xyz')
insert into @tbl values ('102001HS','xyz')
insert into @tbl values ('102001HS','xyz')
select value, a from @tbl group by value, a
输出:
value a
--------------
102001 xyz
102001HS xyz
答案 1 :(得分:0)
要解决此问题,请先再次尝试查询,但完全不要使用GROUP BY
子句。这将显示通过WHERE
条件的行的详细信息。 (我怀疑你会发现它们都具有A
列的相同值。)
接下来,请注意GROUP BY
的非标准MySQL扩展。在标准GROUP BY
中,您必须同时提及SELECT
中GROUP BY
中的所有列,除非他们像MAX(C)
或GROUP_CONCAT(D)
一样进行聚合。 https://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html如果您使用MySQL扩展,它可能会产生不可预测的结果。
答案 2 :(得分:0)
如果数字后面总是相同的两个字母,您可以使用此方法。
declare @extension varchar(10) = 'HS'
select * from (
SELECT Replace(A, @extension, '') as A, B, C, ... FROM
... WHERE D>$variable AND E<$variable2 AND ... ... GROUP BY A
) as t Group by t.A
但是,如果扩展字符串更随机,您可能希望查看是否可以使用
LEFT(A, 6)
仅保留前6个字符。 (这用来代替替换部分)