У меня проблема с MS SQL, которую я не могу решить самостоятельно.Ниже приведены таблицы.
AREAS
----------------
RA_NAME varchar
RA_DESC varchar
AD_Results
-------------------
AssetName varchar
Parent_Counter varchar (the RA Name is somewhere within that field)
tblAssets
-----------
AssetID int
tblADComputers
----------------
AssetID int
OU varchar (the RA Name is somewhere within that field)
Я хотел прочитать таблицу AREAS с именем RA и описанием и подсчитать количество AssetNames в AD_Results на основе их RA, а затем посчитать также AssetID в tblAssets, также основанныхдля имени RA.
Общим "ключом" является Имя RA, но оно не является ключевым полем в этих таблицах;на самом деле это подстрока обычного поля.
Два отдельных запроса работают нормально, объединение их в один дает безумно высокие значения в RA_AD_Objects.
Я пытался получить такой список
RA_NAME RA_DESC RA_AD_Objects RA_LS_Push
RA001 X01-01 549909 279
RA002 X02-02 635 0
RA004 X03-04 259306 409
Мой запрос выглядит так:
CREATE View AD_LS_CNT AS
SELECT
AREAS.RA_NAME
, AREAS.RA_DESC
, COUNT(CASE
WHEN CharIndex('/RA', AD_Results.[Parent Container]) > 1
THEN
SubString(AD_Results.[Parent Container], CharIndex('/RA', AD_Results.[Parent Container]) + 1, 5)
When CharIndex('/SH', AD_Results.[Parent Container]) > 1
THEN
SubString(AD_Results.[Parent Container], CharIndex('/SH', AD_Results.[Parent Container]) + 1, 5)
ELSE
'N.A.'
End) AS RA_AD_Objects
, COUNT( DISTINCT tblAssets.AssetID) AS RA_LS_Push
FROM AREAS
JOIN AD_Results ON CHARINDEX(AREAS.RA_NAME, AD_Results.[Parent Container]) > 0
LEFT JOIN tblADComputers ON CHARINDEX(AREAS.RA_NAME, tblADComputers.OU) > 0
LEFT JOIN tblAssets ON tblAssets.AssetID = tblADComputers.AssetID
GROUP BY AREAS.RA_NAME, AREAS.RA_DESC
ORDER BY AREAS.RA_NAME
GO