2013-07-16 5 views
1

У меня есть две таблицы:SQL группа серверов и сосчитать

table machines 
-------------- 
machineID 
FaNo 
Barcode 
RoutingCode 
Name 


table log 
------------- 
logID 
lineBarcode 
machineBarcode 

Итак, я пытаюсь выбрать все машины через log где lineBarcode является то, предписанных в технических заданиях.

SELECT * FROM machines JOIN log ON log.machinebarcode = machines.barcode WHERE log.linebarcode = 100000000001 

Есть некоторые записи в machines, которые имеют тот же routingCode что означает, что они одни и те же модели.
Как я могу получить там счет отдельно?
Я имею в виду мне нужно, чтобы получить что-то вроде

Result 
--------------------------------------- 
RoutingCode  Name   Count 

B4   Machine1   10 
C8   Machine21   7 
D1   Machine12  43 

Так у всех запросов без группы будет иметь 50 записей в свою очередь, и идея заключается в том, чтобы сгруппировать их по routingCode и получить их количество из запроса.
Возможно ли это, и если это так? :)

+0

Ammm это в последний 'code' раздел на вопрос :) Мне нужно иметь счетчик записей, сгруппированных по коду маршрутизации, но я понятия не имею, как могу Я получаю COUNT() для отображения во многих строках. –

ответ

3
SELECT routingcode, name, count(1) 
FROM machines 
LEFT OUTER JOIN log ON log.machinebarcode = machines.barcode 
WHERE (log.linebarcode = 100000000001) OR (log.linebarcode is null) 
GROUP BY routingcode, name 
+0

Спасибо! :) Можете ли вы объяснить мне, почему счет (1), я имею в виду, для чего стоит 1? –

+0

вы можете делать счет (*), независимо от того, оптимизаторы запросов должны правильно обрабатывать это. Это просто говорит, чтобы подсчитать, сколько строк соответствует этой группировке. – BlackICE

+0

Ahaa, спасибо! Еще один вопрос: я попытался установить JOIN в LEFT, просто потому, что я хочу перечислить все группы, объединенные в группы, даже если они не существуют в соответствующей строке в таблице журнала, но ничего не происходит, что мне не хватает? Вкратце: я хочу, чтобы он выбирал все машины, но у тех, у кого есть совпадение в 'log.machinebarcode', я хочу получить правильный счет, поскольку несогласованный я предполагаю, что он должен показывать нуль? –

0
SELECT RoutingCode, Name, COUNT(logID) AS 'Count' 
FROM machine 
JOIN log ON log.machinebarcode = machine.barcode 
WHERE log.lineBarcode = 100000000001 
GROUP BY RoutingCode, Name 

Это даст вам результат, который вы хотели.

Успехов *

+0

Почему вы используете' like' для 'varchar', а не' = '? –

Смежные вопросы