2015-08-17 4 views
0

Я не очень хорошо знаком с SQL, но я знаю основы. Недавно я пытался реплицировать некоторые отчеты о логической форме на SQL Server 2012. Я начал с пользовательского запроса из Webi (средства отчетности) и пытался сделать из него представление в SQL.Inner Join Неоднозначный синтаксис

Вот что запрос выглядит следующим образом:

SELECT 
    dimGlobalSalesAnalysisTbl.globalSalesAnalysisDesc, 
    dimGlobalShipDestinationCountryTbl.area, 
    dimGlobalShipDestinationCountryTbl.subarea, 
    dimGlobalCurrentProductTbl.sbuCodeDesc, 
    dimGlobalShipDateVw.shipDayOfWeekDesc, 
    sum(factSalesTblVw.globalSalesValue) AS 'Global Sales Value', 
SUM(factSalesTblVw.salesUnitQuantity*GlobalFiles.dimCurrentGTINTbl.unitQty) AS 'Sales Unit Quantity' 
    FROM 
    dimGlobalCookCompaniesTbl INNER JOIN factSalesTblVw ON 
(dimGlobalCookCompaniesTbl.globalCookCompanyID=factSalesTblVw.globalCookCompanyID) 
INNER JOIN dimGlobalHistProductTbl ON (dimGlobalHistProductTbl.globalHistProductID=factSalesTblVw.globalHistProductID) 
INNER JOIN dimGlobalCurrentProductTbl ON (dimGlobalHistProductTbl.globalCurrentProductID=dimGlobalCurrentProductTbl.globalCurrentProductID) 
INNER JOIN dimGlobalHistShipCustomerTbl ON (factSalesTblVw.globalHistShipCustomerID=dimGlobalHistShipCustomerTbl.globalHistShipCustomerID) 
INNER JOIN dimGlobalCurrentShipCustomerTbl ON (dimGlobalHistShipCustomerTbl.shipCustomerID=dimGlobalCurrentShipCustomerTbl.globalCurrentShipCustomerID) 
***INNER JOIN dimGlobalCountryTbl dimGlobalShipDestinationCountryTbl ON (dimGlobalCurrentShipCustomerTbl.shipDestCountryDesc=dimGlobalShipDestinationCountryTbl.countryCode)*** 
INNER JOIN dimGlobalSalesAnalysisTbl ON (factSalesTblVw.globalSalesAnalysisID=dimGlobalSalesAnalysisTbl.globalSalesAnalysisID) 
INNER JOIN dimGlobalShipDateVw ON (dimGlobalShipDateVw.shipJulianDate=factSalesTblVw.shipDateID) 
INNER JOIN GlobalFiles.dimCurrentGTINTbl ON (GlobalFiles.dimCurrentGTINTbl.curGtinId=factSalesTblVw.GtinID) 

WHERE 
(
    dimGlobalShipDateVw.shipYearNumber IN (DATEPART(yy,GETDATE())-1) 
    AND 
    dimGlobalCurrentShipCustomerTbl.shipCustomerNumberDesc 
    IN ('JPC000222-3','CNC000012-1' ) 
    AND 
    dimGlobalSalesAnalysisTbl.globalSalesAnalysisDesc = 'Return Credits' 
) 
GROUP BY 
dimGlobalShipDateVw.shipDate, 
dimGlobalSalesAnalysisTbl.globalSalesAnalysisDesc, 
dimGlobalShipDestinationCountryTbl.area, 
dimGlobalShipDestinationCountryTbl.subarea, 
dimGlobalCurrentProductTbl.sbuCodeDesc, 
Upper(dimGlobalCurrentProductTbl.familyCodeDesc), 
dimGlobalShipDateVw.shipYearNumber, 
dimGlobalShipDateVw.shipDayOfWeekDesc, 
dimGlobalCurrentProductTbl.madeByAbbr, 
dimGlobalCookCompaniesTbl.companyDesc 

Этот конкретный запрос выполняется в производственной системе, если RAN в соответствующей базе данных. При попытке просмотреть этот запрос в другой базе данных, я предшествую объектам по имени [database_name]. [Schema/dbo].

На выполнении запроса, я получаю ошибку:

Invalid object name 'WWS.dbo.dimGlobalShipDestinationCountryTbl'

Я пытаюсь найти конкретную таблицу в базе данных, но это не там, хотя нависают над именем таблицы в запросе дать определение таблицы, но не скрипт.

Эта таблица присутствует в странном внутреннем присоединиться (шестому внутреннего соединения) синтаксис, как это:

INNER JOIN dimGlobalCountryTbl dimGlobalShipDestinationCountryTbl ON (dimGlobalCurrentShipCustomerTbl.shipDestCountryDesc=dimGlobalShipDestinationCountryTbl.countryCode)

Два вопроса: 1. Может кто-то пожалуйста объяснить этот синтаксис запросов для внутреннего соединения? 2. Это довольно глупо, но любые идеи о том, как смотреть на возможные скрытые определения таблиц?

+0

Какую часть вы добавили [имя_базы_данных]. [Schema/dbo] to? строка 'dimGlobalCountryTbl dimGlobalShipDestinationCountryTbl' сглаживает таблицу как другое имя. Обновление, которое вы делаете, должно быть только в первой части. так что '[database_name]. [schema/dbo] .dimGlobalCountryTbl dimGlobalShipDestinationCountryTbl' – xQbert

+0

Это может быть представление вместо таблицы, хотя его имя заканчивается на Tbl. –

+0

dimGlobalShipDestinationCountryTbl - это псевдоним для таблицы с именем «dimGlobalCountryTbl». – BWS

ответ

1

Два вопроса: 1. Может кто-нибудь объяснить этот синтаксис запроса для внутреннего соединения?

Внутреннее соединение в этом случае является не более чем псевдонимом таблицы. Создателю рассматриваемого запроса, наложенному на таблицу, было бы легче понять это имя вместо фактического имени таблицы, или одна и та же таблица будет указана дважды, и у вас должен быть псевдоним.

2. Это довольно глупо, но любые идеи о том, как смотреть на возможные скрытые определения таблиц? Почему? Я думаю, что у вас просто синтаксическая ошибка на вашем SQL при добавлении синтаксиса database_name.schema.

Придумайте псевдоним таблицы, как псевдоним столбца .... но и так же, как колонны, вы можете опустить «как» ключевое слово ...

dimGlobalCountryTbl dimGlobalShipDestinationCountryTbl такая же, как

dimGlobalCountryTbl AS dimGlobalShipDestinationCountryTbl

Смежные вопросы