Я застрял, пытаясь написать JOIN, который выдаст набор результатов в соответствии с приведенным ниже примером вывода, но без предложения WHERE, которое я включил, чтобы показать, как должны выглядеть правильные данные.Если предложение WHERE исключено, оно дает неверные результаты.
В таблице #TblA перечислены экземпляры SQL Server на гипотетическом сайте с версией SQL Server и номером сборки, например.'12 .0.5579.0 '
Таблица #TblB представляет собой список всех (в данном примере сокращенных) версий и номеров сборок SQL Server.
Цель состоит в том, чтобы получить набор результатов, в котором перечислены все экземпляры SQL Server, SQLVersion и ProductVersion (Build) вместе с любым ProductVersion (равным пакетам обновлений и накопительным обновлениям), доступным в #TblB, равном * 1009.* выше , чем текущая версия продукта для данной версии экземпляра SQL и версии продукта.
Если вы посмотрите на пример результирующего набора, он должен повторить строки #TblA относительно более высоких строк ProductVersion в #TblB.Между прочим, это позволит сгруппированный отчет в службах Reporting Services.
SET NOCOUNT ON
GO
IF OBJECT_ID('tempdb..#tblA') IS NOT NULL
DROP TABLE #tblA
create table #tblA -- build info for specific servers
(
SQLInstance varchar(128),
SQLVersion varchar(32),
ProductVersion varchar(32)
)
GO
INSERT INTO #tblA VALUES ( 'MyServer1', 'SQL Server 2016', '13.0.4001.0' )
INSERT INTO #tblA VALUES ( 'MyServer2', 'SQL Server 2016', '13.0.4001.0' )
INSERT INTO #tblA VALUES ( 'MyServer3', 'SQL Server 2014', '12.0.2000.8' )
INSERT INTO #tblA VALUES ( 'MyServer4', 'SQL Server 2014', '12.0.5000.0' )
INSERT INTO #tblA VALUES ( 'MyServer5', 'SQL Server 2012', '11.0.6020.0' )
INSERT INTO #tblA VALUES ( 'MyServer6', 'SQL Server 2012', '11.0.5058.0' )
GO
IF OBJECT_ID('tempdb..#tblB') IS NOT NULL
DROP TABLE #tblB
create table #tblB -- ALL builds available
(
SQLVersion varchar(32),
ProductVersion varchar(32)
)
INSERT INTO #tblB VALUES ( 'SQL Server 2017', '14.0.3025.34' )
INSERT INTO #tblB VALUES ( 'SQL Server 2017', '14.0.3023.8' )
INSERT INTO #tblB VALUES ( 'SQL Server 2017', '14.0.3022.28' )
INSERT INTO #tblB VALUES ( 'SQL Server 2017', '14.0.3015.40' )
INSERT INTO #tblB VALUES ( 'SQL Server 2017', '14.0.3008.27' )
INSERT INTO #tblB VALUES ( 'SQL Server 2017', '14.0.3006.16' )
INSERT INTO #tblB VALUES ( 'SQL Server 2016', '13.0.5026.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2016', '13.0.4474.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2016', '13.0.4466.4' )
INSERT INTO #tblB VALUES ( 'SQL Server 2016', '13.0.4457.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2016', '13.0.4451.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2016', '13.0.4446.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2016', '13.0.4435.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2016', '13.0.4422.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2016', '13.0.4411.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2016', '13.0.4001.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.5579.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.5571.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.5557.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.5556.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.5553.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.5546.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.5540.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.5538.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.5522.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.5511.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.5000.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.4522.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.4511.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2014', '12.0.2000.8' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.7001.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.6607.3' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.6598.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.6594.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.6579.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.6567.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.6544.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.6540.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.6537.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.6523.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.6518.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.6020.0' )
INSERT INTO #tblB VALUES ( 'SQL Server 2012', '11.0.5678.0' )
И запрос:
-- The following gives a correct dataset in the format required for grouped reporting but ONLY because of the WHERE clause
-- Want a neat query that will produce the same format for all versions without the WHERE clause
SELECT
a.*,
b.*
FROM
#tblB b
left join #tblA a
ON b.ProductVersion > a.ProductVersion
AND a.SQLVersion = b.SQLVersion
WHERE
a.SQLVersion = 'SQL Server 2014'
Вывод: -
**SQLInstance SQLVersion ProductVersion SQLVersion ProductVersion**
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.5579.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.5571.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.5557.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.5556.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.5553.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.5546.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.5540.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.5538.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.5522.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.5511.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.5000.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.4522.0
MyServer3 SQL Server 2014 12.0.2000.8 SQL Server 2014 12.0.4511.0
MyServer4 SQL Server 2014 12.0.5000.0 SQL Server 2014 12.0.5579.0
MyServer4 SQL Server 2014 12.0.5000.0 SQL Server 2014 12.0.5571.0
MyServer4 SQL Server 2014 12.0.5000.0 SQL Server 2014 12.0.5557.0
MyServer4 SQL Server 2014 12.0.5000.0 SQL Server 2014 12.0.5556.0
MyServer4 SQL Server 2014 12.0.5000.0 SQL Server 2014 12.0.5553.0
MyServer4 SQL Server 2014 12.0.5000.0 SQL Server 2014 12.0.5546.0
MyServer4 SQL Server 2014 12.0.5000.0 SQL Server 2014 12.0.5540.0
MyServer4 SQL Server 2014 12.0.5000.0 SQL Server 2014 12.0.5538.0
MyServer4 SQL Server 2014 12.0.5000.0 SQL Server 2014 12.0.5522.0
MyServer4 SQL Server 2014 12.0.5000.0 SQL Server 2014 12.0.5511.0