2013-04-24 79 views
0

我想知道如何使用group by但仍然顯示完整的數據?我只想分組。羣但依然顯示所有數據?

在這裏,我給我的表的例子:

picture

這是我的查詢:

(SELECT dp.menu_paket,d.id_detail,t.no_meja,m.nama_menu,d.jumlah,t.status,t.nama_pegawai 
FROM menu m 
join detail_paket dp on dp.menu_paket=m.nama_menu 
JOIN detail_transaksi d on m.id_menu = d.id_menu 
join transaksi t on t.id_transaksi=d.id_transaksi where t.status='progress' and d.status_menu='progress' group by id_detail) 
UNION 
(SELECT dp.menu_paket,d.id_detail,t.no_meja,p.nama_paket,d.jumlah,t.status,t.nama_pegawai 
FROM paket p 
join detail_paket dp on dp.id_paket=p.id_paket 
JOIN detail_transaksi d on d.id_paket=p.id_paket 
join transaksi t on t.id_transaksi=d.id_transaksi where t.status='progress' and d.status_menu='progress' group by id_detail); 

感謝..!

+0

你爲什麼說這些2行應該會消失?什麼是邏輯? – 2013-04-24 04:47:32

+0

這將是一個非常好的主意,指出你正在使用的數據庫。 SQL Server? PostgreSQL的? MySQL的?甲骨文? – jpmc26 2013-04-24 04:54:19

+0

@ jpmc26數據庫是mysql。 – 2013-04-24 05:01:30

回答

-1

我想我看到兩個問題。

1)GROUP BY通常用於爲SUM之類的聚合函數分組行時使用。您可能正在尋找控制行順序的ORDER BY。您可以指定多列ORDER BY以獲得「分組」效果。如果你只想讓列在列表中相鄰,這就是你想要的。

2)UNION,至少在我所知的數據庫中,刪除重複的行。如果要保留所有行,則需要UNION ALL

編輯:

在回答海報的評論,你一定要ORDER BY,也許UNION ALL。它應該是ORDER BY no_meja, id_transaksi。嘗試以下查詢,看看它是否給你你想要的:

SELECT * FROM 
((SELECT dp.menu_paket,d.id_detail,t.no_meja,m.nama_menu,d.jumlah,t.status,t.nama_pegawai 
FROM menu m 
join detail_paket dp on dp.menu_paket=m.nama_menu 
JOIN detail_transaksi d on m.id_menu = d.id_menu 
join transaksi t on t.id_transaksi=d.id_transaksi 
where t.status='progress' and d.status_menu='progress') 
UNION ALL 
(SELECT dp.menu_paket,d.id_detail,t.no_meja,p.nama_paket,d.jumlah,t.status,t.nama_pegawai 
FROM paket p 
join detail_paket dp on dp.id_paket=p.id_paket 
JOIN detail_transaksi d on d.id_paket=p.id_paket 
join transaksi t on t.id_transaksi=d.id_transaksi 
where t.status='progress' and d.status_menu='progress')) x 
ORDER BY x.no_meja, x.id_transaksi; 
+0

那麼,最新的解決方案? – 2013-04-24 05:09:50

+0

爲什麼我的答案被降低了? @ galuano1我想說刪除'GROUP BY'並在'UNION'ed查詢中添加一個'ORDER BY'(並確保你使用了你想要排序的列);它看起來並不像你需要'GROUP BY',因爲你沒有聚合。事實上,我希望這些查詢會引發錯誤。請參見[here](http://dev.mysql.com/doc/refman/5.0/en/group-by-extensions.html),其中指出「包含」GROUP BY「子句的查詢不能引用nonaggregated選擇列表中未在「GROUP BY」子句中命名的列。將'UNION'更改爲'UNION ALL'。 – jpmc26 2013-04-24 05:32:46

0

你可以申請不同,以避免相同的多個記錄,而不是group by。因爲當有聚合函數的時候使用group by就是你的查詢。 當兩行完全相同時,獨特檢索單行而不是多行。

試試這個

select distinct columnname from table name 
union 
select distinct columnname1 from table name 
+0

如果您使用'UNION',則不需要'distinct',因爲'UNION'操作符會自動刪除重複項。 – 2013-04-24 07:38:38

+0

我很困惑。我沒有看到海報想要刪除重複行的任何跡象。我所看到的一切都表明他/她只是想控制訂購。 – jpmc26 2013-04-24 19:28:13