我的表格值为
ColumnA ColumnB ASD A CSD B DSD C ESD D FSD D GSD D
A列是主键,我需要结果为
ColumnA ColumnB ASD A CSD B DSD C ESD D
我想要B列和B列中的所有唯一值他们关联的第一个值columnA。
我尝试了几个查询&看着谷歌,却找不到蚂蚁解决方案。
谢谢, 罗希特夏尔。
答案 0 :(得分:3)
首先是关键顺序的第一个(即按字母顺序排列)。
SELECT MIN(ColumnA) AS ColumnA, ColumnB
FROM tbl
GROUP BY ColumnB
您出于某种原因标记了MySQL和Oracle。以上内容适用于两者。
Oracle还具有分析功能,可以帮助this general type查询。
答案 1 :(得分:2)
select min(columna) columna, columnb
from mytable
group by columnb;
答案 2 :(得分:2)
使用分析(Oracle):
SQL> WITH tab AS (
2 SELECT 'ASD' columnA, 'A' columnB FROM DUAL
3 UNION ALL SELECT 'CSD', 'B' FROM DUAL
4 UNION ALL SELECT 'DSD', 'C' FROM DUAL
5 UNION ALL SELECT 'ESD', 'D' FROM DUAL
6 UNION ALL SELECT 'FSD', 'D' FROM DUAL
7 UNION ALL SELECT 'GSD', 'D' FROM DUAL
8 )
9 SELECT columnA, columnB
10 FROM (SELECT columnA, columnB,
11 rank() over(PARTITION BY columnB ORDER BY columnA) rnk
12 FROM tab)
13 WHERE rnk = 1;
COLUMNA COLUMNB
------- -------
ASD A
CSD B
DSD C
ESD D
答案 3 :(得分:0)
select min(ColumnA) as ColumnA,ColumnB from table
group by ColumnB
答案 4 :(得分:0)
CREATE TABLE #t_Val
(
ColumnA VARCHAR(3) PRIMARY KEY
, ColumnB CHAR(1) NOT NULL
)
INSERT #t_Val
SELECT 'ASD' , 'A'
UNION
SELECT 'CSD' , 'B'
UNION
SELECT 'DSD' , 'C'
UNION
SELECT 'ESD' , 'D'
UNION
SELECT 'FSD' , 'D'
UNION
SELECT 'GSD' , 'D'
SELECT MIN(ColumnA),ColumnB
FROM #t_Val
GROUP BY ColumnB
答案 5 :(得分:0)
另一种做同样事情的方式:
SELECT DISTINCT
FIRST_VALUE(ColumnA)
OVER (PARTITION BY ColumnB
ORDER BY ColumnA) AS ColumnA,
ColumnB
FROM tbl
这样做的好处是可以使用多个列(即GROUP BY方法不起作用的地方)。
答案 6 :(得分:0)
这是解决方案
CREATE TABLE tbl_test
(
col1
varchar(5)整理latin1_general_ci NOT NULL,
col2
varchar(5)整理latin1_general_ci NOT NULL,
主要关键(col1
)
)ENGINE = MyISAM DEFAULT CHARSET = latin1 COLLATE = latin1_general_ci;
INSERT INTO tbl_test
VALUES('ASD','A');
插入tbl_test
VALUES('CSD','B');
插入tbl_test
VALUES('DSD','C');
插入tbl_test
VALUES('ESD','D');
插入tbl_test
VALUES('FSD','D');
插入tbl_test
VALUES('GSD','D');
SELECT DISTINCT( COL2 ),col1 从tbl_test GROUP BY col2 限制0,30;