有没有办法对字符串的一部分进行分组....
我想创建一个 SQLFIDDLE,但他们似乎必须解决服务器问题,所以我必须让它在这里可见....
这将是数据...
CREATE TABLE tblArticle
(
id int auto_increment primary key,
art_id varchar(20),
art_name varchar(30),
art_color varchar(30),
art_type varchar(5)
);
INSERT INTO tblArticle
(art_id, art_name, art_color, art_type)
VALUES
('12345-1','Textile', 'Black','MAT'),
('12345-2','Textile', 'Red','MAT'),
('12345-3','Textile', 'Green','MAT'),
('12345-4','Textile', 'Blue','MAT'),
('54321-1','Textile', 'Black','MAT'),
('54321-2','Textile', 'Red','MAT'),
('54321-3','Textile', 'Green','MAT'),
('54321-4','Textile', 'Blue','MAT');
所以我得到一些像:
| id | art_id | art_name | art_color | art_type |
----------------------------------------------------------
| 1 | 12345-1 | Textile | Black | MAT |
| 2 | 12345-2 | Textile | Red | MAT |
| 3 | 12345-3 | Textile | Green | MAT |
| 4 | 12345-4 | Textile | Blue | MAT |
| 5 | 54321-1 | Textile | Black | MAT |
| 6 | 54321-2 | Textile | Red | MAT |
| 7 | 54321-3 | Textile | Green | MAT |
| 8 | 54321-4 | Textile | Blue | MAT |
| 9 | 9876543 | Textile | White | MAT |
----------------------------------------------------------
我的选择看起来像
Select art_id, art_name FROM tblArticle WHERE art_type = 'MAT' GROUP BY art_name
我需要的是 art_id (如果它使用 -1 或 -2 等等都无关紧要)和 art_name 来做进一步的查询。
如您所见,我有 2 个不同的 art_id 组......我想按它们分组。
所以我得到了两组...... 12345和54321。但我什至不知道如何开始^^
预期结果:
12345, Textile
54321, Textile
9876543, Textile
我尝试将 art_id 添加到我的 group by 但效果与不使用 group by 相同 ^^
我能做些什么来实现这一目标?
像这样解决:
SELECT DISTINCT @IF( @SCAN( art_id, '-' ) +1,
@LEFT( art_id, @SCAN( art_id, '-')),
art_id) AS art_id, art_name
FROM tblArticle
WHERE art_type LIKE '%MAT%';
在这种情况下,DISTINCT
具有与 a 相同的效果GROUP BY
。
+1
如果扫描找不到任何东西,则用于获取 0。如果没有找到它实际上返回-1。但 IF 需要 0(假)或 1+(真)。在我的情况下,永远不会有-
第一名。
无法使用 GROUP BY,因为它只接受整数或列。