У меня есть запрос, который дает мне вывод, как показано на скриншоте ниже.
select
a.storeId, b.district, b.region,
count (case when a.photoAppImage is null then 1 end) as via_u,
count (case when a.photoAppImage =1 then 1 end) as via_p
from
used_listings_V2 a
left outer join
locations b on a.storeId = b.storeID
where
convert(date, a.imageUpdateDate) = convert(date, GETDATE()-1)
group by
a.storeId, b.district, b.region
отредактировано
Я хотел разделить подсчеты в двух разных столбцах, которые я получаю в одной строке. Для всех записей с нулевым значением photoAppImage количество должно отображаться в разделе «Via_u», а для записей с 1 значением photoAppImage количество должно отображаться в разделе «Via_p». Ожидаемый результат будет выглядеть следующим образом:
В основном я думаю, что мне трудно давать псевдонимы внутри оператора case. Может ли кто-нибудь помочь мне в этом?
Плохие привычки, от которых нужно избавиться: использование псевдонимов таблиц, подобных a-b-c-or-t1-t2-t3


Использовать:
Count(case when a.photoappimage is null then 1 end) as via_u,
Count(case when a.photoappimage is null then 1 end)/100. as via_u_pct,
Count(case when a.photoappimage=1 then 1 end ) as via_p,
Count(case when a.photoAppImage is null or a.photoAppImage=1 then 1 end) as via_u_or_p
Обновление: объединение всего (и использование подзапроса для упрощения расчета процента):
select
storeId,
district,
region,
via_u,
via_p,
via_u/100./(via_u+via_p) as via_u_pct
from (
select
a.storeId, b.district, b.region,
count (case when a.photoAppImage is null then 1 end) as via_u,
count (case when a.photoAppImage =1 then 1 end) as via_p
from
used_listings_V2 a
left outer join
locations b on a.storeId = b.storeID
where
convert(date, a.imageUpdateDate) = convert(date, GETDATE()-1)
group by
a.storeId, b.district, b.region
) Step1
это не дает правильного вывода. StoreId 111 должен появляться в выводе только один раз.
Вы также должны удалить photoappimage из выбора и группы. Вы не можете одновременно показать это и ожидать одну строку. Если вы хотите, чтобы люди редактировали ваш запрос, не ждите, что вам придется вводить его заново.
Но вы группируете по нескольким столбцам, что делает вашу цель несовместимой с вашим запросом и вашим описанием. Никто не может прочитать ни ваши мысли, ни вашу схему. Возможно, удалите a.photoAppImage из предложения GROUP BY?
@tinazmu большое спасибо! Он работает, как и ожидалось. Я удалил изображение и добавил код в вопрос. Кроме того, я хотел добавить два столбца count, то есть via_u и via_p, но я не могу этого сделать, так как я думаю, что это псевдонимы. Любой способ добиться этого?
@SMor Если я удалю район и регион из группы, я не могу выбрать эти поля, и я хочу, чтобы это было в выводе. Что я могу сделать в таком случае. Извините, я знаю, что это глупый вопрос, но я очень новичок в SQL.
Разве ваше последнее редактирование не дает вам то, что вы хотите (с store_id, районом, регионом в SELECT и в GROUP BY)? Мы предложили удалить только photoAppImage, а не другие.
Да @тиназму. Это дает правильный вывод.
Можете ли вы помочь мне добавить значения via_u и via_p. например, для добавления первой строки (в выводе необходим дополнительный столбец) должно содержаться 4 (4+0)
Вы имеете в виду, что в дополнение к столбцам via_u и via_p вам также нужен счет этих двух? вы можете сделать подсчет (случай, когда a.photoAppImage имеет значение null или a.photoAppImage = 1, затем 1 конец)
Отлично @tinazmu. Тонны спасибо вам. Он работает, как и ожидалось. И последнее, что, если я хочу рассчитать процент, например (via_u/addition)*100?????
Добавлен процентный пример; выберите принятый ответ, если он сработал
Держать на секунду! что такое "дополнение"? Откуда это взялось?
дополнение via_u_or_p
Пожалуйста, разместите код и данные в виде текста, а не изображений.