選擇行我有值表作爲如何基於唯一列
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列&所有唯一值其關聯的第一個值columnA。
我試過幾個查詢&看了Google卻找不到ant解決方案。
謝謝, Rohit。
選擇行我有值表作爲如何基於唯一列
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列&所有唯一值其關聯的第一個值columnA。
我試過幾個查詢&看了Google卻找不到ant解決方案。
謝謝, Rohit。
首先按鍵順序(即按字母順序)。
SELECT MIN(ColumnA) AS ColumnA, ColumnB
FROM tbl
GROUP BY ColumnB
由於某種原因,您已經標記了MySQL和Oracle。以上將在兩個工作。
Oracle還具有可幫助查詢的this general type的分析功能。
select min(columna) columna, columnb
from mytable
group by columnb;
與分析(甲骨文):
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
我喜歡它:如果'first'的推斷定義結果不正確,則更容易改變。出於興趣,Oracle不需要派生表的名稱,那麼呢?你爲什麼選擇在CTE上使用派生表? – onedaywhen 2010-07-22 10:18:21
@onedaywhen:由於我不熟悉SQL Server詞彙表,因此我不確定是否完全理解了您的問題。在使用子查詢時,Oracle不需要別名(與派生表是否相同?)。 'WITH'子句在Oracle中稱爲子查詢分解,我發現提供一個小型自包含示例很有用:您可以在環境中運行查詢,而無需創建任何其他對象(您無法創建#temporary表當會話在Oracle中結束時會自毀)。 – 2010-07-22 13:45:19
我實際上使用的是標準SQL術語:)定義表tabned'tab'('SELECT ... UNION ALL SELECT ...')的子查詢被稱爲公用表表達式(CTE)和子查詢查詢'tab' CTE被稱爲派生表。但我會嘗試用Oracle術語對我的問題進行重新表述... – onedaywhen 2010-07-22 15:53:52
select min(ColumnA) as ColumnA,ColumnB from table
group by ColumnB
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
做同樣的事情的另一種方式:
SELECT DISTINCT
FIRST_VALUE(ColumnA)
OVER (PARTITION BY ColumnB
ORDER BY ColumnA) AS ColumnA,
ColumnB
FROM tbl
這具有與使用優勢多於一列(即GROUP BY方法不行的地方) K)。
這裏是溶液
CREATE TABLE tbl_test
( col1
VARCHAR(5)整理latin1_general_ci NOT NULL, col2
VARCHAR(5)整理latin1_general_ci NOT NULL, PRIMARY KEY(col1
) )ENGINE = MyISAM的默認字符集= latin1 COLLATE = latin1_general_ci;
INSERT INTO tbl_test
VALUES('ASD','A'); INSERT INTO tbl_test
VALUES('CSD','B'); INSERT INTO tbl_test
VALUES('DSD','C'); INSERT INTO tbl_test
VALUES('ESD','D'); INSERT INTO tbl_test
VALUES('FSD','D'); INSERT INTO tbl_test
VALUES('GSD','D');
SELECT DISTINCT( COL2 )中,col1 FROM tbl_test GROUP BY COL2 LIMIT 0,30;
你試過什麼疑問?他們給了什麼結果? – FrustratedWithFormsDesigner 2010-07-21 14:31:22
「第一」是什麼意思? – pascal 2010-07-21 15:07:41