Тип данных операнда nvarchar (max) недопустим для оператора вычитания - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь отобразить данные таблицы из базы данных в моем приложении. Но когда я пытаюсь повернуть запрос на основе требований, я получаю следующую ошибку:

Тип данных операнда nvarchar (max) недопустим для оператора вычитания.

Ниже приведены подробности. Вот мой оригинальный запрос.

select Currency1, Currency2,M.MonthName+'-'+YearName as Month, Price
from tbl_Currency C
inner join tbl_Month M on M.monthID = C.monthid
inner join tbl_Year Y on Y.yearid = C.yearid
where C.monthid in ('7') and C.yearid = '5'

Ниже получен вывод

Table data

Ниже приведен формат, необходимый для отображения данных.

Required Table Format

Ниже приведен сводный запрос, который я пытался отформатировать.

DECLARE @sql as nvarchar(max) ,
    @month1 as NVarchar(max) ,
    @year1 as nvarchar(max),
    @io as nvarchar(max)
set @month1 = '7';
set @year1 = '2';

set @io = (STUFF((SELECT ',[' + Convert(varchar,M.MonthName+''+YearName,50)+']' from
        tbl_Currency C inner join tbl_Month M on M.monthID=C.monthid
inner join tbl_Year Y on Y.yearid=C.yearid
where C.monthid IN (@month1  ) and C.yearid IN ( @year1 ) GROUP BY M.CodeName+''+YearName  order by M.CodeName+''+YearName
FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)'),1,1,''));

select  @sql = 'select * from (select Currency1, Currency2,((M.CodeName) + (YearName)) as Month,price from 
tbl_Currency C inner join tbl_Month M on M.monthID=C.monthid
inner join tbl_Year Y on Y.yearid=C.yearid
where C.monthid = (3) and C.yearid = (2) ) t
PIVOT (
MAX(amount)
FOR Month IN ('+@io+' )
) As pivot_table';

EXEC SP_EXECUTESQL @sql

Ниже приведен вывод:

enter image description here

Как можно добиться конкатенации - в месяце и году получить имя столбца как Jul-20. Я пробовал приведенный ниже запрос, но получил ошибку - Тип данных операнда nvarchar (max) недопустим для оператора вычитания

select  @sql = 'select * from (select Currency1, Currency2,((M.CodeName) + '-' + (YearName)) as Month,price from 
tbl_Currency C inner join tbl_Month M on M.monthID=C.monthid
inner join tbl_Year Y on Y.yearid=C.yearid
where C.monthid = (3) and C.yearid = (2) ) t
PIVOT (
MAX(amount)
FOR Month IN ('+@io+' )
) As pivot_table';

Извините за длинный пост. Пытался объяснить все проделанные шаги. Любая помощь будет оценена. Поскольку я новый пользователь, предложите мне улучшить презентацию, если это необходимо.

...