我有一個表,並希望組合表合同。但是,當我嘗試使用group時,它只返回每一行,請檢查Sqlfillder。集團通過每個返回只有一行
查詢:Select * from employees group by contract
我有一個表,並希望組合表合同。但是,當我嘗試使用group時,它只返回每一行,請檢查Sqlfillder。集團通過每個返回只有一行
查詢:Select * from employees group by contract
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
你的查詢和SELECT * FROM @EMPLOYEES有什麼區別? :Ø –
在上面的問題無法得到預期的結果集,因爲合同是定義的關鍵字,它不能作爲列名..所以我在[合同]和組中提到這一個,我們需要列出列 – mohan111
Nishanthi Grashia是對的。你的查詢沒有意義。您只需從員工中選擇*。 group by子句是多餘的,甚至是混淆的。而且你的回答並不能真正回答任何問題。 –
這是相當荒謬的分組,而是選擇*。
您正在按合同分組。所以你得到一個合同的一條線。然後你想要所有的列,這是旁邊的合同id和名稱。您不指定您想要查看每個合約的哪個ID和哪個名稱,以便隨機匹配。
一個很好的規則是爲你選擇的每一列指定一個分組(按照你的例子中的合同)或聚合(MIN,MAX等)。
Select contract, GROUP_CONCAT(name), id from employees group by contract;
合同分爲;名稱在此示例中彙總。這就是它的樣子。但是,id既沒有被分組,也沒有被聚合在我的例子中。因此,根據規則,決定是否將id分組(如此以便每個id獲得一行,這在這裏沒有意義,因爲這將是表的每個記錄)或聚合(例如:MIN(id))或者根本沒有被選中。
你可以請添加一個例子你的預期?在SqlFillder中,我有兩行。那是我的預期。 – Jens
您對羣組條款有什麼期望? –
你想使用group by子句只是告訴我們可以幫你 – Sadikhasan