2014-06-17 31 views
0

我有一個表,並希望組合表合同。但是,當我嘗試使用group時,它只返回每一行,請檢查Sqlfillder。集團通過每個返回只有一行

查詢:Select * from employees group by contract

SqlFillder

+0

你可以請添加一個例子你的預期?在SqlFillder中,我有兩行。那是我的預期。 – Jens

+3

您對羣組條款有什麼期望? –

+0

你想使用group by子句只是告訴我們可以幫你 – Sadikhasan

回答

-2
Declare @employees table (
    id int not null, 
    name char(30) not null, 
    [contract] char(30) not null, 
    PRIMARY KEY (id) 
); 



insert into @employees (id, name, [contract]) 
values 
(1, 'John', 'full-time'), 
(2, 'Mike', 'full-time'), 
(3, 'Alex', 'part-time'), 
(4, 'Jerry', 'part-time'); 

Select e.id,e.name,e.[contract] from @employees e group by e.id,e.name,e.contract 
+1

你的查詢和SELECT * FROM @EMPLOYEES有什麼區別? :Ø –

+0

在上面的問題無法得到預期的結果集,因爲合同是定義的關鍵字,它不能作爲列名..所以我在[合同]和組中提到這一個,我們需要列出列 – mohan111

+0

Nishanthi Grashia是對的。你的查詢沒有意義。您只需從員工中選擇*。 group by子句是多餘的,甚至是混淆的。而且你的回答並不能真正回答任何問題。 –

-1

這是相當荒謬的分組,而是選擇*。

您正在按合同分組。所以你得到一個合同的一條線。然後你想要所有的列,這是旁邊的合同id和名稱。您不指定您想要查看每個合約的哪個ID和哪個名稱,以便隨機匹配。

一個很好的規則是爲你選擇的每一列指定一個分組(按照你的例子中的合同)或聚合(MIN,MAX等)。

Select contract, GROUP_CONCAT(name), id from employees group by contract; 

合同分爲;名稱在此示例中彙總。這就是它的樣子。但是,id既沒有被分組,也沒有被聚合在我的例子中。因此,根據規則,決定是否將id分組(如此以便每個id獲得一行,這在這裏沒有意義,因爲這將是表的每個記錄)或聚合(例如:MIN(id))或者根本沒有被選中。