SQL Server: количество символов в играх. Sql количество символов
sql - SQL Server: количество символов в играх
Ваша таблица выложена, как результат сводного запроса, и будет намного проще проанализировать эти данные, если они сначала "не считаются".
SELECT Num_Conc, datasort, jackpot, premio, Symbol, SymValue FROM Chaves UNPIVOT ( SymValue FOR [Symbol] IN ([s1], [s2], [s3], [s4], [s5], [s6], [s7], [s8], [s9], [s10], [s11], [s12], [s13]) ) AS UPIV"Непривязанные" строки выглядят следующим образом:
| Num_Conc | datasort | jackpot | premio | Symbol | SymValue | |----------|------------|---------|--------|--------|----------| | 1 | 2016-01-03 | true | 0 | s1 | 2 | | 1 | 2016-01-03 | true | 0 | s2 | X | | 1 | 2016-01-03 | true | 0 | s3 | X | | 1 | 2016-01-03 | true | 0 | s4 | X | | 1 | 2016-01-03 | true | 0 | s5 | 1 |Как только данные находятся в этой форме, тривиальной задачей является их подсчет с использованием предложения GROUP BY и функции COUNT().
SELECT Num_Conc, datasort, jackpot, premio , count(case when U.SymValue = '1' then 1 end) as [total1-counts] , count(case when U.SymValue = 'X' then 1 end) as [totalx-counts] , count(case when U.SymValue = '2' then 1 end) as [total2-counts] FROM ( SELECT Num_Conc, datasort, jackpot, premio, Symbol, SymValue FROM Chaves UNPIVOT ( SymValue FOR [Symbol] IN ([s1], [s2], [s3], [s4], [s5], [s6], [s7], [s8], [s9], [s10], [s11], [s12], [s13]) ) AS UPIV ) AS U GROUP BY Num_Conc, datasort, jackpot, premio ;Существует альтернативный синтаксис с использованием CROSS APPLY вместо UNPIVOT, который дает тот же результат, что и выше:
SELECT Num_Conc, datasort, jackpot, premio , count(case when U.SymValue = '1' then 1 end) as [total1-counts] , count(case when U.SymValue = 'X' then 1 end) as [totalx-counts] , count(case when U.SymValue = '2' then 1 end) as [total2-counts] FROM Chaves CROSS APPLY ( values ('s1' ,s1 ) , ('s2' ,s2 ) , ('s3' ,s3 ) , ('s4' ,s4 ) , ('s5' ,s5 ) , ('s6' ,s6 ) , ('s7' ,s7 ) , ('s8' ,s8 ) , ('s9' ,s9 ) , ('s10' ,s10 ) , ('s11' ,s11 ) , ('s12' ,s12 ) , ('s13' ,s13 ) , ('s14' ,s14 ) ) as U (symname,symvalue) GROUP BY Num_Conc, datasort, jackpot, premio ;qaru.site
Выборка определенного количества символов в SQL запросе
Форум: "Начинающим";Поиск по всему сайту: www.delphimaster.net;Текущий архив: 2006.08.13;Скачать: [xml.tar.bz2];Вниз
Выборка определенного количества символов в SQL запросе
Как выбрать определенное количество символов в sql запросе начиная с конца поля, например "123456" > "3456"С уважением.
ЮЮ © (2006-07-26 10:40) [1]В MS SQL: RIGHT(<строка>, <количество>)У других серверов, наверняка, что-то найдется подобное.В стандарте, имхо, такого нет. Лишь SUBSTRING, т.е. подйдет, если количество симолов в значениях поля одинаковое и известное
Константин_ (2006-07-26 11:03) [2]select cast(dogovor as char(3)) from pred.dbf where cast(dogovor as int)>1000В таком запросе получается выборка 3 символов с начала строки, а может его можно как то изменить?
Desdechado © (2006-07-26 11:31) [3]Видимо, намек указать СУБД не понят.
ЮЮ © (2006-07-26 11:35) [4]БД какая?
В таком запросе получается выборка 3 символов с начала строки, а может его можно как то изменить?
С начал строки, естественно, проблем нет, коль есть Substring()
Константин_ (2006-07-26 11:47) [5]выборка производиться из талицы DBase IV при помощи компонента Query
ЮЮ © (2006-07-26 11:48) [6]SELECT dogovor from pred.dbf where cast(dogovor as int) < 10000 /* 1 - 4х значные*.UNION ALLSELECT Substring(dogovor from 2 for 4) FROM pred.dbf where cast(dogovor as int) BETWEEN 10000 AND 99999 /* для 5-начных*/UNION ALL... и так далее
З.Ы. зачем такие важные последнии символа слис со столь маловажными первыми в одом поле? Раздели, пока не поздно
ЮЮ © (2006-07-26 11:50) [7]З.Ы. Как будешь различать договора 123456 и 213456 после такого запроса?
Константин_ (2006-07-26 11:52) [8]Работа ведеться с водомерным счетчиком, а у него есть такая особенность перекручиваться... очень не хорошая.Спасибо за помощь.
Константин_ (2006-07-26 11:53) [9]Поля договор взял из др. базы, что бы попробовать запрос... водомеров под рукой нет
ЮЮ © (2006-07-26 12:01) [10]> а у него есть такая особенность перекручиваться... очень > не хорошая.
У него наверное всего 4 числа то и есть и для него естественно "перекручиваться", а вот откуда в базе появляются неестественные 5-е цифры?
Константин_ (2006-07-26 12:04) [11]начальные показания 9985 последние показания 0010 в баз 10010
ЮЮ © (2006-07-26 12:20) [12]Ну и откуда эта 1 в базе?
следующее показание будет 0100, а у тебя уже предыдущее 10010. Опять перекрутка нужна? Или пририсовка?
Может лучше оставлять как есть 0010?А при расчетах учитывать возможность "перекрутки"
Константин_ (2006-07-26 12:26) [13]Можно было бы оставить... но прога уже в эксплуатации... недоглядел, теперь мучаюсь
Форум: "Начинающим";Поиск по всему сайту: www.delphimaster.net;Текущий архив: 2006.08.13;Скачать: [xml.tar.bz2];Наверх
Память: 0.74 MBВремя: 0.104 c
www.delphimaster.net
количество символов в играх MS SQL Server
Попробуйте этот трюк
SELECT *, (SELECT Count(v) FROM (VALUES (s1),(s2),(s3),(s4),...) AS value(v) WHERE v IN ( '2', '1', 'X' )) AS TOTAL_COUNT FROM chavesЧтобы получить индивидуальный счет, используйте
;WITH cte AS (SELECT *, (SELECT Count(v) FROM (VALUES (s1),(s2),(s3),(s4),..) AS value(v) WHERE v = '1') AS count_1, (SELECT Count(v) FROM (VALUES (s1),(s2),(s3),(s4),..) AS value(v) WHERE v = 'x') AS count_x, (SELECT Count(v) FROM (VALUES (s1),(s2),(s3),(s4),..) AS value(v) WHERE v = '2') AS count_2 FROM chaves) SELECT count_1 + count_x + count_2 AS TOTAL_COUNT FROM cte;Ваша таблица выложена, как результат сводного запроса, и будет намного проще проанализировать эти данные, если они сначала «не считаются».
SELECT Num_Conc, datasort, jackpot, premio, Symbol, SymValue FROM Chaves UNPIVOT ( SymValue FOR [Symbol] IN ([s1], [s2], [s3], [s4], [s5], [s6], [s7], [s8], [s9], [s10], [s11], [s12], [s13]) ) AS UPIV«Непривязанные» строки выглядят следующим образом:
| Num_Conc | datasort | jackpot | premio | Symbol | SymValue | |----------|------------|---------|--------|--------|----------| | 1 | 2016-01-03 | true | 0 | s1 | 2 | | 1 | 2016-01-03 | true | 0 | s2 | X | | 1 | 2016-01-03 | true | 0 | s3 | X | | 1 | 2016-01-03 | true | 0 | s4 | X | | 1 | 2016-01-03 | true | 0 | s5 | 1 |Как только данные находятся в этой форме, тривиальной задачей является их подсчет с использованием предложения GROUP BY и функции COUNT ().
SELECT Num_Conc, datasort, jackpot, premio , count(case when U.SymValue = '1' then 1 end) as [total1-counts] , count(case when U.SymValue = 'X' then 1 end) as [totalx-counts] , count(case when U.SymValue = '2' then 1 end) as [total2-counts] FROM ( SELECT Num_Conc, datasort, jackpot, premio, Symbol, SymValue FROM Chaves UNPIVOT ( SymValue FOR [Symbol] IN ([s1], [s2], [s3], [s4], [s5], [s6], [s7], [s8], [s9], [s10], [s11], [s12], [s13]) ) AS UPIV ) AS U GROUP BY Num_Conc, datasort, jackpot, premio ;Существует альтернативный синтаксис с использованием CROSS APPLY вместо UNPIVOT, который дает тот же результат, что и выше:
SELECT Num_Conc, datasort, jackpot, premio , count(case when U.SymValue = '1' then 1 end) as [total1-counts] , count(case when U.SymValue = 'X' then 1 end) as [totalx-counts] , count(case when U.SymValue = '2' then 1 end) as [total2-counts] FROM Chaves CROSS APPLY ( values ('s1' ,s1 ) , ('s2' ,s2 ) , ('s3' ,s3 ) , ('s4' ,s4 ) , ('s5' ,s5 ) , ('s6' ,s6 ) , ('s7' ,s7 ) , ('s8' ,s8 ) , ('s9' ,s9 ) , ('s10' ,s10 ) , ('s11' ,s11 ) , ('s12' ,s12 ) , ('s13' ,s13 ) , ('s14' ,s14 ) ) as U (symname,symvalue) GROUP BY Num_Conc, datasort, jackpot, premio ;Трюк состоит в том, чтобы конкатрировать все 13 столбцов (совпадений?), А затем сравнить длину 1 – исходную строку и 2- строку с заменой (или заменой) (concat (s1, s2 ….), 'X', ' ') и снова для «1» и «2»: select *, length(concat(s1,s2...s13)) - length(replace(concat(s1,s2...s13),'1','')) as 'ones' (and again for 'x' and '2's) from tablename
select *, concat(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13) as 'full_games_string', length(concat(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13))-length(replace(concat(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13),'X','')) as 'Xs', length(concat(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13))-length(replace(concat(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13),'1','')) as '1s', length(concat(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13))-length(replace(concat(s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13),'2','')) as '2s' from Chaves
sqlserver.bilee.com