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

Откуда:
Сообщений: 1009
Вот такой запрос:
SELECT 
	TabKalend.PK_Дата AS Месяц,
	TabFirm.ID AS [IdNci_0062],
	TabSt.[RowCode],
	0 AS Сумма
FROM Календарь_Месяцы AS TabKalend WITH (NOLOCK)
CROSS JOIN Nci_0062 AS TabFirm WITH (NOLOCK)
INNER JOIN (
SELECT TabFact.[IdNci_0062]
	,TabFact.[Id]
	,TabFact.[PosCode]
	,TabFact.[StrType]
	,TabFact.[RowCode]
	,TabFact.[NAME]
	,TabFact.[DateBeg]
	,TabFact.[FormulaOlap]


FROM [dbo].[Rpt_0001_OLAPDIM] AS TabFact WITH (NOLOCK)
WHERE TabFact.[DateBeg] = 
	(SELECT MIN(TabFact2.[DateBeg]) FROM [dbo].[Rpt_0001_OLAPDIM] AS TabFact2 WITH (NOLOCK) 
		WHERE 
			TabFact2.[IdNci_0062] = TabFact.[IdNci_0062] 
			AND TabFact2.[RowCode] = TabFact.[RowCode]
			AND TabFact2.[DateBeg] <= TabKalend.PK_Дата
	)
	
) AS TabSt ON TabSt.[IdNci_0062] = TabFirm.ID

Выдает следующую ошибку:
автор
Не удалось привязать составной идентификатор "TabKalend.PK_Дата".

Подскажите пожалуйста в чем может быть проблема?
Суть задачи выбрать из таблицы "Rpt_0001_OLAPDIM" только те записи, которые отвечают условию по полю [DateBeg], самая ранняя запись больше даты из таблицы дат "Календарь_Месяцы".
23 мар 17, 12:04    [20324943]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
Кесарь
Member

Откуда:
Сообщений: 463
Может сервак что-то не понимает в именах.

Попробуй синтаксис "TabKalend.[PK_Дата]".
23 мар 17, 12:07    [20324964]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
Кесарь
Member

Откуда:
Сообщений: 463
Так, погоди-ка. У тебя таблица используется внутри конструкции inner join. Как этот источник данных узнает про такую таблицу? Вынеси в блок "as ... on".
23 мар 17, 12:09    [20324980]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
Pvase
Member

Откуда:
Сообщений: 1009
Кесарь
Может сервак что-то не понимает в именах.

Попробуй синтаксис "TabKalend.[PK_Дата]".

AND TabFact2.[DateBeg] <= [TabKalend].[PK_Дата]

не помогло. Похоже глюк где то в другом месте, возможно в принципе построения, CROSS JOIN и LEFT JOIN.
Кстати SQL Server 2014 а не 2012 (но не думаю, что проблема в этом).
23 мар 17, 12:13    [20325011]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
TaPaK
Member

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

внутрь JOIN не передать так параметры. Либо выносить, либо CROSS APPLY

ps. В русском варианте и не поймёшь о чём это :) "The multi-part identifier "xxxxx" could not be bound."
23 мар 17, 12:15    [20325027]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
Pvase
Member

Откуда:
Сообщений: 1009
Кесарь
Так, погоди-ка. У тебя таблица используется внутри конструкции inner join. Как этот источник данных узнает про такую таблицу? Вынеси в блок "as ... on".

Спасибо, но не понял. Пишу так (логика неправильная, но чтобы проверить):
SELECT 
	[TabKalend].[PK_Дата] AS Месяц,
	TabFirm.ID AS [IdNci_0062],
	TabSt.[RowCode],
	0 AS Сумма
FROM [dbo].[Календарь_Месяцы] AS [TabKalend] WITH (NOLOCK)
CROSS JOIN Nci_0062 AS TabFirm WITH (NOLOCK)
INNER JOIN (
SELECT TabFact.[IdNci_0062]
	,TabFact.[Id]
	,TabFact.[IdRpt_0007]
	,TabFact.[PosCode]
	,TabFact.[StrType]
	,TabFact.[RowCode]
	,TabFact.[NAME]
	,TabFact.[Formula]
	,TabFact.[Dsc]
	,TabFact.[DateBeg]
	,TabFact.[FormulaOlap]
	,TabFact.[FormulaOlapCopy]
	,TabFact.[КодПолный]
	,TabFact.[СортСтрока]
FROM [dbo].[Rpt_0001_OLAPDIM] AS TabFact WITH (NOLOCK)
WHERE TabFact.[DateBeg] = 
	(SELECT MIN(TabFact2.[DateBeg]) FROM [dbo].[Rpt_0001_OLAPDIM] AS TabFact2 WITH (NOLOCK) 
		WHERE 
			TabFact2.[IdNci_0062] = TabFact.[IdNci_0062] 
			AND TabFact2.[RowCode] = TabFact.[RowCode]
			AND TabFact2.[DateBeg] <= [TabKalend].[PK_Дата]
	)
	
) AS TabSt ON TabSt.[IdNci_0062] = TabFirm.ID [color=orange]AND TabSt.[DateBeg] <= [TabKalend].[PK_Дата][/color]
23 мар 17, 12:17    [20325044]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
TaPaK
Member

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

ну это прям всё меняет....
23 мар 17, 12:19    [20325061]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
Pvase
Member

Откуда:
Сообщений: 1009
Спасибо всем. Внес еще раз запрос по дате внутри джойна и все заработало:
SELECT 
	[TabKalend].[PK_Дата] AS Месяц,
	TabFirm.ID AS [IdNci_0062],
	TabSt.[RowCode],
	0 AS Сумма
FROM [dbo].[Календарь_Месяцы] AS [TabKalend] WITH (NOLOCK)
CROSS JOIN Nci_0062 AS TabFirm WITH (NOLOCK)
INNER JOIN (
SELECT TabFact.[IdNci_0062]
	,[TabKalend2].[PK_Дата] AS [PK_Дата]
	,TabFact.[Id]
	,TabFact.[PosCode]
	,TabFact.[StrType]
	,TabFact.[RowCode]
	,TabFact.[NAME]
	,TabFact.[DateBeg]
	,TabFact.[FormulaOlap]
FROM [dbo].[Rpt_0001_OLAPDIM] AS TabFact WITH (NOLOCK)
CROSS JOIN [dbo].[Календарь_Месяцы] AS [TabKalend2] WITH (NOLOCK)
WHERE TabFact.[DateBeg] = 
	(SELECT MIN(TabFact2.[DateBeg]) FROM [dbo].[Rpt_0001_OLAPDIM] AS TabFact2 WITH (NOLOCK) 
		WHERE 
			TabFact2.[IdNci_0062] = TabFact.[IdNci_0062] 
			AND TabFact2.[RowCode] = TabFact.[RowCode]
			AND TabFact2.[DateBeg] <= TabKalend2.[PK_Дата]
	)
	
) AS TabSt ON TabSt.[IdNci_0062] = TabFirm.ID AND TabSt.[PK_Дата] = [TabKalend].[PK_Дата]
23 мар 17, 12:23    [20325086]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
Кесарь
Member

Откуда:
Сообщений: 463
Зачем два раза джойнить таблицу? А если она по миллиону записей будет?

Попробуй так:

SELECT 
	[TabKalend].[PK_Дата] AS Месяц,
	TabFirm.ID AS [IdNci_0062],
	TabSt.[RowCode],
	0 AS Сумма
FROM [dbo].[Календарь_Месяцы] AS [TabKalend] WITH (NOLOCK)
CROSS JOIN Nci_0062 AS TabFirm WITH (NOLOCK)
INNER JOIN (
  SELECT TabFact.[IdNci_0062]
	,TabFact.[Id]
	,TabFact.[IdRpt_0007]
	,TabFact.[PosCode]
	,TabFact.[StrType]
	,TabFact.[RowCode]
	,TabFact.[NAME]
	,TabFact.[Formula]
	,TabFact.[Dsc]
	,TabFact.[DateBeg]
	,TabFact.[FormulaOlap]
	,TabFact.[FormulaOlapCopy]
	,TabFact.[КодПолный]
	,TabFact.[СортСтрока]
  FROM [dbo].[Rpt_0001_OLAPDIM] AS TabFact WITH (NOLOCK) ) AS TabSt ON TabSt.[IdNci_0062] = TabFirm.ID

WHERE TabFact.[DateBeg] = (SELECT MIN(TabFact2.[DateBeg])
                           FROM [dbo].[Rpt_0001_OLAPDIM] AS TabFact2 WITH (NOLOCK) 
		                   WHERE TabFact2.[IdNci_0062] = TabFact.[IdNci_0062] 
			                 AND TabFact2.[RowCode] = TabFact.[RowCode]
			                 AND TabFact2.[DateBeg] <= [TabKalend].[PK_Дата] )
	
AND TabSt.[DateBeg] <= [TabKalend].[PK_Дата]
23 мар 17, 12:34    [20325144]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Кесарь,

и как по вашему будет работать
AND TabFact2.[DateBeg] <= [TabKalend].[PK_Дата
23 мар 17, 12:39    [20325165]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
Кесарь
Member

Откуда:
Сообщений: 463
TaPaK
Кесарь,

и как по вашему будет работать
AND TabFact2.[DateBeg] <= [TabKalend].[PK_Дата


Я тоже не уверен, что будет :) Вот автор топика пусть и попробует. Я ему показал принцип, как соотносится источник данных и их последующая фильтрация.
23 мар 17, 12:42    [20325187]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Кесарь
TaPaK
Кесарь,

и как по вашему будет работать
AND TabFact2.[DateBeg] <= [TabKalend].[PK_Дата


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

а я уверен, что это бредятина
23 мар 17, 12:42    [20325191]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL 2012 Джойн с вложенным запросом: "Не удалось привязать составной идентификатор"?  [new]
Кесарь
Member

Откуда:
Сообщений: 463
Кесарь
TaPaK
Кесарь,

и как по вашему будет работать
AND TabFact2.[DateBeg] <= [TabKalend].[PK_Дата


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


P.S.

Невнимательно посмотрел: я не уверен на счёт "AND TabSt.[DateBeg] <= [TabKalend].[PK_Дата]", а не той строки, что вы обозначили.
23 мар 17, 12:43    [20325199]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить