I have this table and I’m trying to determine how many Tables (in a restaurant) are awaiting food. The table( in the database) has the following columns: TableNumber, ObjectType, ObjectDescription and Quantity (amongst others).
I made this query to see what is ordered, but would like to know how many unique tables are waiting for food…..
x
SELECT TableNumber AS TAFEL
, COUNT (*) AS AANTAL
, ObjectDescription AS PRODUCT
FROM TableMemory
WHERE (ObjectType = 1 OR ObjectType = 17)
GROUP BY TableNumber, ObjectType, ObjectDescription
ORDER BY TableNumber
which gives me the following output…
TAFEL AANTAL PRODUCT ### OF TABLES
----------- ----------- --------------------------------------------------
1 1 Black Jacks Hotdog 5
1 5 Friet Groot
1 2 Friet Klein
1 1 Friet Middel
1 1 Knoflooksaus
1 1 Uitsmijter Ham/kaas
1 1 Uitsmijter Lou
3 1 Knoflooksaus
3 1 New York Hotdog
7 1 Broodje Gezond
7 1 Knoflooksaus
40 1 Friet Groot
40 1 Met Uitjes
60 1 Friet Middel
60 1 Meenemen
I tried to use count and distinct in the query but nothing I tried seems to give me an extra output for the unique number of tables(restaurant) which should be 5 in the above result.
Can anyone help me? Grateful in advance!
Advertisement
Answer
To add a column which contains the (repeated) [### OF TABLES] you could use CROSS JOIN
/* This will repeat the [### OF TABLES] for each row of the results */
;with
prod_cte as (
SELECT TableNumber AS TAFEL
, COUNT (*) AS AANTAL
, ObjectDescription AS PRODUCT
FROM TableMemory
WHERE (ObjectType = 1 OR ObjectType = 17)
GROUP BY TableNumber, ObjectType, ObjectDescription),
total_cte as (
SELECT COUNT(DISTINCT TableNumber) [### OF TABLES]
FROM TableMemory
WHERE ObjectType IN (1, 17))
select p.*, t.*
from prod_cte p
cross join total_cte t;
[Edit] Without the CTE to work in SQL 2000
select p.*, t.*
from (
SELECT TableNumber AS TAFEL
, COUNT (*) AS AANTAL
, ObjectDescription AS PRODUCT
FROM TableMemory
WHERE (ObjectType = 1 OR ObjectType = 17)
GROUP BY TableNumber, ObjectType, ObjectDescription) p,
(
SELECT COUNT(DISTINCT TableNumber) [### OF TABLES]
FROM TableMemory
WHERE ObjectType IN (1, 17)) t;