Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сумма значений строки / 17 сообщений из 17, страница 1 из 1
13.09.2018, 12:27
    #39702015
jonybest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
Доброго дня!
Есть таблица с 50-тью полями. С имена полей с 1- по 31 - соответствую датам.
Необходимо получить сумму значений строки с именами полей с 1- по 31 по условию где значения числа.
Поискал в гугле, не нашел решения вопроса...
Заранее спасибо за помощь!
...
Рейтинг: 0 / 0
13.09.2018, 12:33
    #39702019
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
... в правилах форума есть пункт в котором просят тестовіе данніе изобразить и желаемій результат..бо придумівать за вкас сие всем откровенно влом
...
Рейтинг: 0 / 0
13.09.2018, 12:37
    #39702025
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
jonybest,

я так понимаю вы не хотите писать Col1 + Col2 ... ?
можно развернуть CROSS APPLY () a Val и писать SUM(Val)

остальное не понятно
...
Рейтинг: 0 / 0
13.09.2018, 12:44
    #39702032
256k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
Сделать динамический запрос
...
Рейтинг: 0 / 0
13.09.2018, 12:53
    #39702041
jonybest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
TaPaKjonybest,

я так понимаю вы не хотите писать Col1 + Col2 ... ?
можно развернуть CROSS APPLY () a Val и писать SUM(Val)

остальное не понятно

все правильно
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
[1]+[2]+[3]+[4]+[5]+[6]+[7]+[8]+[9]+[10]+[11]+[12]+[13]+[14]+[15]+[16]+[17]+[18]+[19]+[20]+
[21]+[22]+[23]+[24]+[25]+[26]+[27]+[28]+[29]+[30]+[31]
FROM
  dbo.Tb_t
WHERE
  dbo.Tb_t.mes = 3 AND 
  dbo.Tb_t.god = '2018' and 


Нужно считать если
1. значение столбца - число - сумму чисел
2. значение столбца - буквы - сумму столбцов
...
Рейтинг: 0 / 0
13.09.2018, 13:07
    #39702056
Владимир Затуливетер
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
Если честно, не очень понятно.
Но возможно вам вычисляемый столбец поможет.
Один раз напишите логику и будете пользоваться.

https://docs.microsoft.com/en-us/sql/relational-databases/tables/specify-computed-columns-in-a-table?view=sql-server-2017
...
Рейтинг: 0 / 0
13.09.2018, 14:32
    #39702129
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
jonybestНужно считать если
1. значение столбца - число - сумму чисел
2. значение столбца - буквы - сумму столбцов
а что дулать если в одной стоке в поле [4] стоит "12" ,а в другой "ФИ" ?
...
Рейтинг: 0 / 0
13.09.2018, 14:33
    #39702130
Maxx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
или DSQL или запрос с кучей case
...
Рейтинг: 0 / 0
13.09.2018, 14:37
    #39702133
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
Maxxили DSQL или запрос с кучей case

далеко не факт, что это то. что нужно, но я пытался

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
declare @t1 table ([1] varchar(100)
                  ,[2] varchar(100)
                  ,[3] varchar(100));

insert @t1
select * from(values('123','456','789'),('abc','def','ghi'),('123','asd','45f'))a(b,c,d)

select isnull(cast(try_cast([1] as int)+try_cast([2] as int)+try_cast([3] as int) as varchar(max)),[1]+[2]+[3])
  from @t1
...
Рейтинг: 0 / 0
13.09.2018, 15:30
    #39702189
jonybest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
ПосетительMaxxили DSQL или запрос с кучей case

далеко не факт, что это то. что нужно, но я пытался


Спасибо, но чуть не то.
Помогите повернуть таблицу, дальше я сам.
Не работал ни когда с оператором UNPIVOT, не пойму что надо...
...
Рейтинг: 0 / 0
13.09.2018, 15:40
    #39702198
Посетитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
jonybestПосетительпропущено...


далеко не факт, что это то. что нужно, но я пытался


Спасибо, но чуть не то.
Помогите повернуть таблицу, дальше я сам.
Не работал ни когда с оператором UNPIVOT, не пойму что надо...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @t1 table (id  int
                  ,[1] varchar(100)
                  ,[2] varchar(100)
                  ,[3] varchar(100));

insert @t1
select * from(values(1,'123','456','789'),(2,'abc','def','ghi'),(3,'123','asd','45f'))a(a,b,c,d)

select id,col,val
  from @t1
 unpivot(val for col in ([1],[2],[3]))u
...
Рейтинг: 0 / 0
18.09.2018, 16:39
    #39704406
jonybest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
Посетительjonybestпропущено...

Спасибо, но чуть не то.
Помогите повернуть таблицу, дальше я сам.
Не работал ни когда с оператором UNPIVOT, не пойму что надо...

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
declare @t1 table (id  int
                  ,[1] varchar(100)
                  ,[2] varchar(100)
                  ,[3] varchar(100));

insert @t1
select * from(values(1,'123','456','789'),(2,'abc','def','ghi'),(3,'123','asd','45f'))a(a,b,c,d)

select id,col,val
  from @t1
 unpivot(val for col in ([1],[2],[3]))u



Спасибо! Многое почерпнул. Параллельно еще вопрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
bl   = sum ( case when (  val like 'Б%' and (val1 not IN (@v1, @v2, @v3)) and (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10))
 and DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then ( case when (val1 IN(@pp1,@pp2)) then 7 else 8 end)  else 0 end ),

ot   = sum ( case when (  val like 'От%' and (val1 not IN (@v1, @v2, @v3)) and (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10))
 and  DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then 8  else 0 end ),

normr1 =   @n-sum ( case when (  val like 'Б%' and (val1 not IN (@v1, @v2, @v3)) and (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10)) and
 DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then ( case when (val1 IN(@pp1,@pp2)) then 7 else 8 end)  else 0 end )-
sum ( case when (  val like 'От%' and (val1 not IN (@v1, @v2, @v3)) and  (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10)) and  
DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then 8  else 0 end )



можно как то упростить запрос? В идеале
Код: sql
1.
normr1 =@n-bl-ot
...
Рейтинг: 0 / 0
18.09.2018, 16:52
    #39704427
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
jonybest,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
bl   = sum(a.f1),

ot   = sum(b.f2),

normr1 =   @n-sum (a.f1)-sum(b.f2)
from
 ... cross apply
 (select case when (  val like 'Б%' and (val1 not IN (@v1, @v2, @v3)) and (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10))
 and DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then ( case when (val1 IN(@pp1,@pp2)) then 7 else 8 end)  else 0 end) a(f1) cross apply
 (select case when (  val like 'От%' and (val1 not IN (@v1, @v2, @v3)) and (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10))
 and  DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then 8  else 0 end) b(f2)



ЗЫ: Если не хотите проблем - никогда не пользуйтесь not in
...
Рейтинг: 0 / 0
18.09.2018, 16:56
    #39704430
jonybest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
Спасибо! А как лучше организовать перечисление значений переменных? Через
Код: plsql
1.
@v1 or @v2 or @v3

?
...
Рейтинг: 0 / 0
18.09.2018, 17:31
    #39704459
jonybest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
invmjonybest,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
bl   = sum(a.f1),

ot   = sum(b.f2),

normr1 =   @n-sum (a.f1)-sum(b.f2)
from
 ... cross apply
 (select case when (  val like 'Б%' and (val1 not IN (@v1, @v2, @v3)) and (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10))
 and DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then ( case when (val1 IN(@pp1,@pp2)) then 7 else 8 end)  else 0 end) a(f1) cross apply
 (select case when (  val like 'От%' and (val1 not IN (@v1, @v2, @v3)) and (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10))
 and  DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then 8  else 0 end) b(f2)



ЗЫ: Если не хотите проблем - никогда не пользуйтесь not in

Каюсь, дал не весь код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT 
bl   = sum ( case when (  val like 'Б%' and (val1 not IN (@v1, @v2, @v3)) and (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10))
 and DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then ( case when (val1 IN(@pp1,@pp2)) then 7 else 8 end)  else 0 end ),

ot   = sum ( case when (  val like 'От%' and (val1 not IN (@v1, @v2, @v3)) and (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10))
 and  DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then 8  else 0 end ),

normr1 =   @n-sum ( case when (  val like 'Б%' and (val1 not IN (@v1, @v2, @v3)) and (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10)) and
 DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then ( case when (val1 IN(@pp1,@pp2)) then 7 else 8 end)  else 0 end )-
sum ( case when (  val like 'От%' and (val1 not IN (@v1, @v2, @v3)) and  (val1 not IN (@p1, @P2, @P3, @P4, @P5, @P6, @P7, @P8, @P9, @P10)) and  
DATEPART(dw, cast(@g+'.'+@m+'.'+val1 as datetime))not IN (6, 7))  then 8  else 0 end )
  unpivot(val for val1  in ([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[11],[12],[13],[14],[15]
  ,[16],[17],[18],[19],[20],[21],[22],[23],[24],[25],[26],[27],[28],[29],[30],[31])) u
WHERE
  mes = '3' AND 
  god = '2018'



Ваш пример не могу состыковать с
Код: sql
1.
unpivot
...
Рейтинг: 0 / 0
18.09.2018, 18:11
    #39704476
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
jonybestСпасибо! А как лучше организовать перечисление значений переменных? Через
Код: plsql
1.
@v1 or @v2 or @v3


?Можно через и not in. Но только если среди перечисленных значений гарантированно не может быть null
Поэтому надежней, например, так
Код: sql
1.
not exists(select * from (values (@v1), (@v2), (@v3)) t(v) where v = val1))


jonybestКаюсь, дал не весь кодВидимо опять показали не весь запрос.
...
Рейтинг: 0 / 0
19.09.2018, 09:36
    #39704714
jonybest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма значений строки
jonybestКаюсь, дал не весь кодВидимо опять показали не весь запрос.[/quot]
СПС! Разобрался!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Сумма значений строки / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]