2016-06-02 3 views
0

Я пытаюсь создать отчет с тремя столбцами, и все они происходят из одной таблицы, содержащей «местный магазин», «ID», «TotalSpend», «Номер карточки участника».SQL-запрос для sql Lite

Store  Totalnumofmembers TotalSpendforall 
-----  ------------------ --------------- 
Store A  1500     $100.50 
Store B  2000     $500.00 
Store C  400     $300.00 

И его не давая мне результат я хотел при попытке запустить этот запрос:

SELECT "Local Store", 
    (SELECT count(ID) FROM ListMembers WHERE Id=a.Id and "Member Card Number" is not null) AS totalnumofmembers, 
    (SELECT sum("total spend") FROM ListMembers WHERE Id=a.Id) AS totalspendforall FROM ListMembers a 
GROUP BY "Local Store" 

Есть ли другой способ кроме использования самостоятельно присоединиться? спасибо

+1

Можете ли вы опубликовать, что возвращает ваш запрос и каков ожидаемый результат? – istovatis

ответ

0

Если вы хотите сделать это в одном запросе, вы можете использовать оператор CASE для выполнения условного подсчета членов с действительными номерами карт в том же запросе, что и суммирование общих расходов.

SELECT `Local Store`, 
    COUNT(CASE WHEN `Member Card Number` IS NOT NULL THEN 1 ELSE 0 END) AS totalnumofmembers, 
    SUM(`total spend`) AS totalspendforall 
FROM ListMembers 
GROUP BY `Local Store` 

Если вы не против, подзапрос, то вы можете попробовать следующее

SELECT t1.`Local Store`, t1.totalnumofmembers, t2.totalspendforall 
FROM 
(
    SELECT `Local Store`, COUNT(*) AS totalnumofmembers 
    FROM ListMembers 
    WHERE `Member Card Number` IS NOT NULL 
    GROUP BY `Local Store` 
) t1 
INNER JOIN 
(
    SELECT `Local Store`, SUM(`total spend`) AS totalspendforall 
    FROM ListMembers 
    GROUP BY `Local Store` 
) t2 
    ON t1.`Local Store` = t2.`Local Store` 
+0

Благодарим вас за быстрый ответ. Я попробовал еще одно соединение. выберите «Местный магазин», count (a.Id) в качестве «Число участников», сумма (b. «total costs») из ListMembers a присоединиться к ListMembers b на b.id = a.id где a «Номер карточки участника» не является нулевым группой. «Местный магазин», я попытался с вышеуказанным, и я думаю, что он делает то, что есть, поскольку цифры были большими, трудно сказать. Правильно ли логика? извините, как я могу поместить перерыв в моем комментарии, так как каждый раз, когда я нажимаю Enter, чтобы перейти к следующей строке, msg размещен :( – ll2016

+0

... и ... у вас все еще есть проблема? Вы хотите опубликовать запрос попробовал? –

+0

просто еще один вопрос, который я хотел бы добавить еще один столбец, который показывает, что участник зарегистрировался, кто позже 1 июня. Это отличается от моего другого общего столбца участника, потому что столбец с полным номером будет включать всех участников с момента создания. столбец должен быть только тем, кто подписывается на 1-ое июня. Я попытался со следующим запросом, и результаты моего нового столбца ошибочны? – ll2016

0

Thanx. удалось решить эту проблему. Не понял, что SQL lite не использует функцию to_date, такую ​​как oracle. Все хорошо. Большое вам спасибо.