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

Откуда:
Сообщений: 2031
Здравствуйте!

Есть SQL-запрос, который выгружает часть данных из OLAP.

+SQL-Запрос
WITH Profit AS (
	SELECT	
	CAST(F1."[Торговые точки].[Код ТТ].[Код ТТ].[MEMBER_CAPTION]" AS VARCHAR(20)) AS [Код ТТ],
	CAST(F1."[Продукция].[Код продукции].[Код продукции].[MEMBER_CAPTION]" AS VARCHAR(20)) AS [Код продукции],
	CONVERT(nvarchar(10), F1."[Время].[Дата].[Дата].[MEMBER_CAPTION]" , 104) AS [Дата],
	F1."[Measures].[Отгрузки шт]" AS [Отгрузки шт],
	F1."[Measures].[Возвраты шт]" AS [Возвраты шт]	
	FROM OPENROWSET(
	'MSOLAP',
	'Provider=MSOLAP.3;Integrated Security=SSPI;Persist Security Info=True;Initial Catalog=profit;Data Source=xxx.yyy.ru;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error',
	'SELECT
		{[Measures].[Отгрузки шт],
		[Measures].[Возвраты шт]}
	ON 0,
	NON EMPTY		
		[Торговые точки].[Код ТТ].[Код ТТ]*
		[Продукция].[Код продукции].[Код продукции]	*
		[Время].[Дата].[Дата]
	ON 1
	FROM
		(SELECT
			([Время].[Дата].&[2017-06-01T00:00:00]:[Время].[Дата].&[2017-08-10T00:00:00],			
			{[Торговые точки].[Клиент].[Клиент1]},		
			{[Города].[Город].&[1],
			[Города].[Город].&[3]}
			) ON 0
			FROM PROFIT)'
	) AS F1
)

,
Block AS (
	SELECT
		CustItemBlocking.ITEMID AS [Код номенклатуры],
		CustItemBlocking.CUSTACCOUNTSP AS [Код ТТ],		
		CustItemBlocking.BLOCKED AS [Блокировка]	
	FROM
		Server1.DataBase1.dbo.CustItemBlocking CustItemBlocking 
	)
	
SELECT
	Profit.[Код ТТ],
	Profit.[Код продукции],
	Profit.[Дата],
	Block.[Блокировка]
FROM
	Profit
LEFT JOIN
	Block
ON
	Profit.[Код ТТ]=Block.[Код ТТ]
	AND
	Profit.[Код продукции] = block.[Код ТТ]

Выдает такую ошибку "Не удалось разрешить конфликт параметров сортировки между "Cyrillic_General_CI_AS" и "Cyrillic_General_CI_AI" в операции equal to.".

Ошибка выходит из за выделенных строк.

Почему пишет про сортировку, если в запросе отсутствует Order By? Как надо правильно написать запрос?
3 мар 18, 14:33    [21234737]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
xenix
Guest
ferzmikk,

там, где такое пишет, можно попробовать явно написать
COLLATE CYRILLIC_GENERAL_CI_AS
3 мар 18, 14:44    [21234753]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 2031
xenix
там, где такое пишет, можно попробовать явно написать
COLLATE CYRILLIC_GENERAL_CI_AS

В каком месте в данном запросе надо писать или это как отдельный запрос?
3 мар 18, 15:05    [21234781]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
xenix
Guest
ferzmikk,
типы данных в запросе не видно, поэтому я бы сделал как-то так
FROM
	Profit
LEFT JOIN
	Block
ON
	Profit.[Код ТТ] COLLATE CYRILLIC_GENERAL_CI_AS=Block.[Код ТТ] COLLATE CYRILLIC_GENERAL_CI_AS
	AND
	Profit.[Код продукции]COLLATE CYRILLIC_GENERAL_CI_AS = block.[Код ТТ]COLLATE CYRILLIC_GENERAL_CI_AS
3 мар 18, 15:15    [21234799]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 2031
xenix
типы данных в запросе не видно

Поля CustItemBlocking.[Код номенклатуры] и CustItemBlocking.[Код ТТ] имеют тип nvarchar(20). А CustItemBlocking.[Блокировка] - int.
3 мар 18, 15:43    [21234848]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 2031
xenix
ferzmikk,
типы данных в запросе не видно, поэтому я бы сделал как-то так
FROM
	Profit
LEFT JOIN
	Block
ON
	Profit.[Код ТТ] COLLATE CYRILLIC_GENERAL_CI_AS=Block.[Код ТТ] COLLATE CYRILLIC_GENERAL_CI_AS
	AND
	Profit.[Код продукции]COLLATE CYRILLIC_GENERAL_CI_AS = block.[Код ТТ]COLLATE CYRILLIC_GENERAL_CI_AS

Запрос заработал!
3 мар 18, 15:46    [21234852]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

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

Спасибо!
3 мар 18, 16:00    [21234869]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
bideveloper
Member

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

а лучше поменять Collation в исходных данных, на которых строится OLAP.
3 мар 18, 16:06    [21234877]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 2031
bideveloper
а лучше поменять Collation в исходных данных, на которых строится OLAP.

Вы имеете ввиду в самом MDX-запросе или в среде SQL Server Business Intelligence Development Studio?

Это позволит значительно увеличить скорость выгрузки?
3 мар 18, 16:21    [21234892]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30821
ferzmikk
Вы имеете ввиду в самом MDX-запросе или в среде SQL Server Business Intelligence Development Studio?
Это позволит значительно увеличить скорость выгрузки?
В базе MSSQL или в хранилище MSOLAP
Нехорошо, когда разные коллейты, и да, это может ускорить запросы, и вообще меньше будет проблем.
ferzmikk
ON
	Profit.[Код ТТ]=Block.[Код ТТ]
	AND
	Profit.[Код продукции] = block.[Код ТТ]

Вообще странные условия, получается, в PROFIT поле [Торговые точки].[Код ТТ].[Код ТТ] всегда равно [Продукция].[Код продукции].[Код продукции]
3 мар 18, 18:22    [21235028]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 2031
alexeyvg
ferzmikk
ferzmikk
ON
	Profit.[Код ТТ]=Block.[Код ТТ]
	AND
	Profit.[Код продукции] = block.[Код ТТ]

Вообще странные условия, получается, в PROFIT поле [Торговые точки].[Код ТТ].[Код ТТ] всегда равно [Продукция].[Код продукции].[Код продукции]

Упс
ON
	Profit.[Код ТТ]=Block.[Код ТТ]
	AND
	Profit.[Код продукции] = block.[Код номенклатуры]
3 мар 18, 18:52    [21235064]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить