Мне нужно получить подстроку из столбца «источник» из typeTable и иметь возможность получать статистику по каждому региону из этого столбца. Строка будет выглядеть примерно так: server001 [en-US]. Затем распечатайте статистику для каждой страны. То есть мне нужна countForType и totalForType для каждой страны.SQL Server: групповой запрос на основе подстроки столбца
Итак, я считаю, что все вызовы server001 и группировать их по странам - это то, что я ищу.
Мой запрос, до сих пор выглядит следующим образом:
use thedatabase;
declare @fromDate datetime = '2016-02-01 00:00:00.000';
declare @toDate datetime = '2016-02-02 23:59:59.999';
declare @source varchar(15) = 'server001';
DECLARE @countForType bigint;
DECLARE @totalForType decimal(30,8);
DECLARE @country varchar(10);
SELECT @countForType = count(*),
@totalForType = SUM(typeTable.amount),
@country =
case
when (charindex('[', typeTable.source) > 0 and charindex(']', typeTable.source) > 0)
then substring(typeTable.source, charindex('[', typeTable.source) +1, (charindex(']', typeTable.source) - 1) - charindex('[', typeTable.source))
else null
end
FROM theTypeTable typeTable (nolock)
WHERE typeTable.startDate > @fromDate
AND typeTable.startDate < @toDate
AND typeTable.source like @source
GROUP BY typeTable.source; -- i believe the issue may be here -- source is the entire string 'server001[en-US]'. I need to group and provide stats per country, which is a substring of source.
--Print report:
PRINT 'countForType: ' + CAST(@countForType AS VARCHAR);
PRINT 'totalForType: ' + CAST(@totalForType AS VARCHAR);
--for each country, print the amounts/ percentages etc...
PRINT 'country: ' + CAST (@country AS VARCHAR);
Отчет сам по себе будет выглядеть примерно так:
countForType: 104
totalForType: 110000.00000000
country: en-US
countForType: 55
totalForType: 95000.00000000
country: de-CH
countForType: 25
totalForType: 5000.00000000
country: tr-TR
countForType: 30
totalForType: 10000.00000000
Может кто-то дайте мне знать, если я нахожусь на правильном пути здесь, или если это должно быть полностью переписано? Любые указатели оцениваются.
Это простой вопрос программирования, пожалуйста, google и узнайте о функции SUBSTRING в SQL Server. –
Я знаю, как использовать подстроку. Пожалуйста, прочитайте сообщение полностью. – Matt
Я полностью прочитал сообщение. Поскольку вы уже указали информацию о предложении GROUP BY, я предположил, что вы не знаете, как получить подстроку. Можете ли вы более четко указать, какую часть этого вопроса вы не знаете, как это сделать? –