Я не очень хорошо знаком с 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. Это довольно глупо, но любые идеи о том, как смотреть на возможные скрытые определения таблиц?
Какую часть вы добавили [имя_базы_данных]. [Schema/dbo] to? строка 'dimGlobalCountryTbl dimGlobalShipDestinationCountryTbl' сглаживает таблицу как другое имя. Обновление, которое вы делаете, должно быть только в первой части. так что '[database_name]. [schema/dbo] .dimGlobalCountryTbl dimGlobalShipDestinationCountryTbl' – xQbert
Это может быть представление вместо таблицы, хотя его имя заканчивается на Tbl. –
dimGlobalShipDestinationCountryTbl - это псевдоним для таблицы с именем «dimGlobalCountryTbl». – BWS