Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 подсчитать сумму  [new]
seeerg_23
Member

Откуда:
Сообщений: 1102
не получается подсчитать сумму след запросе. запрос рабочий, в столбцах выводится несколько цифр, а надо одно общее значение, суммарное:

SELECT        T1.ID,                                                      
                             (SELECT        CAST(T11.Capacity / 10  AS varchar(10))+' ' AS 'data()'
                               FROM            dbo.DATA T11
                               WHERE        T1.ID = T11.ID FOR xml path('')) AS New_Capacity
FROM            dbo.System T1


не получается просто сумму подсчитать: SUM(T11.Capacity / 10 AS varchar(10)), выдаётся ошибка.
26 янв 17, 16:10    [20150025]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
IDVT
Member

Откуда:
Сообщений: 320
У Вас столько тем и сообщений..... в ошибке сервер то пишет почему не может агрегировать varchar(10).

...FOR xml path('')...
это зачем Вам?
26 янв 17, 16:20    [20150105]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
IDVT
Member

Откуда:
Сообщений: 320
IDVT
У Вас столько тем и сообщений..... в ошибке сервер то пишет почему не может агрегировать varchar(10).

...FOR xml path('')...
это зачем Вам?

что то я совсем в небесах....
SUM(T11.Capacity / 10 AS varchar(10))
синтаксис проверьте....
26 янв 17, 16:26    [20150152]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Может, так?
SELECT        T1.ID,
[SUM(T11.Capacity / 10)]=SUM(T11.Capacity / 10),
                             (SELECT        CAST(T11.Capacity / 10  AS varchar(10))+' ' AS 'data()'
                               FROM            dbo.DATA T11
                               WHERE        T1.ID = T11.ID FOR xml path('')) AS New_Capacity
FROM            dbo.System T1
GROUP BY T1.ID
26 янв 17, 16:34    [20150224]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
seeerg_23
Member

Откуда:
Сообщений: 1102
IDVT
IDVT
У Вас столько тем и сообщений..... в ошибке сервер то пишет почему не может агрегировать varchar(10).

...FOR xml path('')...
это зачем Вам?

что то я совсем в небесах....
SUM(T11.Capacity / 10 AS varchar(10))
синтаксис проверьте....


а какой сиснтаксис правильный именно для моего примера с подзапросом и алиасами?
26 янв 17, 18:12    [20150671]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
seeerg_23
Member

Откуда:
Сообщений: 1102
iap
Может, так?
SELECT        T1.ID,
[SUM(T11.Capacity / 10)]=SUM(T11.Capacity / 10),
                             (SELECT        CAST(T11.Capacity / 10  AS varchar(10))+' ' AS 'data()'
                               FROM            dbo.DATA T11
                               WHERE        T1.ID = T11.ID FOR xml path('')) AS New_Capacity
FROM            dbo.System T1
GROUP BY T1.ID


не работает, выдаёт ошибку: the multi-part identifier "T11.Capacity" could not be bound.
26 янв 17, 18:16    [20150695]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
seeerg_23
iap
Может, так?
SELECT        T1.ID,
[SUM(T11.Capacity / 10)]=SUM(T11.Capacity / 10),
                             (SELECT        CAST(T11.Capacity / 10  AS varchar(10))+' ' AS 'data()'
                               FROM            dbo.DATA T11
                               WHERE        T1.ID = T11.ID FOR xml path('')) AS New_Capacity
FROM            dbo.System T1
GROUP BY T1.ID



не работает, выдаёт ошибку: the multi-part identifier "T11.Capacity" could not be bound.
Заменить 11 на 1 в выделенном мною не судьба?
Ясно же, что в запросе выборка из dbo.System T1
26 янв 17, 19:03    [20150882]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
seeerg_23
Member

Откуда:
Сообщений: 1102
видимо не судьба, так как выдаётся ошибка. поле Capacity находится в таблице Data. если ему присвоить T1, то получается, что выборка его должна происходить из табл System, где его нет.
26 янв 17, 20:27    [20151056]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
seeerg_23,

а System точно нужна? Может, и в основном запросе из DATA выбирать?
Если это не подходит, то приджойнить DATA в основном запросе к System.
И в сумме прописать Capacity из DATA
27 янв 17, 10:04    [20152107]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
seeerg_23
не получается подсчитать сумму след запросе. запрос рабочий, в столбцах выводится несколько цифр, а надо одно общее значение, суммарное:
SELECT T1.ID,
       (SELECT CAST(T11.Capacity / 10  AS varchar(10))+' ' AS 'data()'
           FROM dbo.DATA T11
           WHERE T1.ID = T11.ID FOR xml path('')
       ) AS New_Capacity
FROM dbo.System T1

не получается просто сумму подсчитать: SUM(T11.Capacity / 10 AS varchar(10)), выдаётся ошибка.
Повторю вопрос - зачем вам FOR xml?
Нужно подсчитать сумму для поля? Ну и считайте, SUM(поле)
27 янв 17, 10:30    [20152254]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
alexeyvg
seeerg_23
не получается подсчитать сумму след запросе. запрос рабочий, в столбцах выводится несколько цифр, а надо одно общее значение, суммарное:
SELECT T1.ID,
       (SELECT CAST(T11.Capacity / 10  AS varchar(10))+' ' AS 'data()'
           FROM dbo.DATA T11
           WHERE T1.ID = T11.ID FOR xml path('')
       ) AS New_Capacity
FROM dbo.System T1


не получается просто сумму подсчитать: SUM(T11.Capacity / 10 AS varchar(10)), выдаётся ошибка.
Повторю вопрос - зачем вам FOR xml?
Нужно подсчитать сумму для поля? Ну и считайте, SUM(поле)
Может, хочет видеть список слагаемых суммы?
27 янв 17, 10:39    [20152321]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
seeerg_23
Member

Откуда:
Сообщений: 1102
iap,

сначала был простой запрос. перечисляемые данные располагались относительно одного ID в новой строке. Следовательно, надо было сделать соответствие ID-1; 2; ..10, то есть перечислять в одной строке, поэтому применил запрос с подзапросом и алиасами, и с " as 'data()' .. For xml path ('') " . Но оказалось в поле не 2-3 значения, как предполагалось. а гораздо больше - и 7 и 10. Длинная сапись мешает и её решил преобразовать в одно общее значение и выводить общую сумму.
SELECT        T1.ID,                                                      
    (SELECT        SUM(T11.Capacity AS varchar(10)) AS 'data()'
     FROM            dbo.DATA T11
     WHERE        T1.ID = T11.ID ) AS New_Capacity
FROM            dbo.System T1

если убрать из подзапроса " For xml path ('') " , то выдаётся синтаксич ошибка.
27 янв 17, 11:56    [20152728]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
IDVT
Member

Откуда:
Сообщений: 320
Нууу нет у скуля такого синтаксиса, Вы уж простите его....

Что Вам нужно вывести, какие колонки?
1. ID
2. Сумму по каждому ID
3. В строке все слагаемые
27 янв 17, 12:01    [20152758]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
SELECT
 S.ID
,[Сумма]=SUM(D.Capacity/10)
,[Слагаемые]=
 STUFF
 (
  (
   SELECT '+'+CAST(DD.Capacity/10)
   FROM dbo.DATA DD
   WHERE DD.ID=S.ID
   FOR XML PATH('')
  )
  ,1,1,''
 )
FROM dbo.[System] S
JOIN dbo.DATA D ON S.ID=D.ID
GROUP BY S.ID;
27 янв 17, 12:16    [20152822]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
Я там опечатался: надо
CAST(DD.Capacity/10 AS VARCHAR)
27 янв 17, 12:17    [20152827]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
seeerg_23
Member

Откуда:
Сообщений: 1102
IDVT,

в первом поле ID, во - общая сумма, перечислять слагаемые уже не нужно, так как их много. то есть должно вместо

111 - 2; 3; 74;
112 - 11; 200;
113 - 7; 9;

должно быть

111 - 79
112 - 211
113 - 16
27 янв 17, 12:21    [20152839]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
IDVT
Member

Откуда:
Сообщений: 320
Select S.ID
     , Sum( D.Capacity ) as SumCapacity
from dbo.System as S
     inner join  dbo.Data as D
Group by S.ID
27 янв 17, 12:26    [20152868]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
IDVT,

не взлетит :)
27 янв 17, 12:29    [20152880]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
TaPaK
IDVT,

не взлетит :)
Если он допишет, получится плагиат!
Я подам на него в суд!
27 янв 17, 12:35    [20152907]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31993
IDVT
Select S.ID
     , Sum( D.Capacity ) as SumCapacity
from dbo.System as S
     inner join  dbo.Data as D
Group by S.ID
Что то очень упрощённо...
А где for xml, где cast(... as varchar) хотя бы?
27 янв 17, 21:55    [20155423]     Ответить | Цитировать Сообщить модератору
 Re: подсчитать сумму  [new]
iap
Member

Откуда: Москва
Сообщений: 47145
alexeyvg
IDVT
Select S.ID
     , Sum( D.Capacity ) as SumCapacity
from dbo.System as S
     inner join  dbo.Data as D
Group by S.ID

Что то очень упрощённо...
А где for xml, где cast(... as varchar) хотя бы?
Гораздо хуже, что нет ON
28 янв 17, 12:09    [20156288]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить