[英]sql server 2008: combining two complex queries
这是一个仅返回1列(称为数据路径)的查询:
SELECT --assumes number not at end of string
LEFT(startOf, PATINDEX('%[^0-9]%', startof)-1)
FROM
(
SELECT --assumed 3 digits minimum
SUBSTRING(datapath, PATINDEX('%[0-9][0-9][0-9]%', datapath), 8000) AS startOf
FROM
(select datapath from batchinfo where LEN(datapath)>3) as bar
) foo
在下面这个选择语句中的另一句话,而不是选择数据路径,我想运行上面的sql语句
SELECT reporttime,
datapath,
finalconc,
instrument
FROM batchinfo
JOIN qvalues ON batchinfo.rowid = qvalues.rowid
WHERE compound = 3 AND name = "hey"
AND batchinfo.instrument = 44
AND batchinfo.reporttime LIKE '10/%/2010%'";
SELECT reporttime,
datapath,
finalconc,
instrument
FROM
(
SELECT --assumes number not at end of string
LEFT(startOf, PATINDEX('%[^0-9]%', startof)-1) AS datapath, --correct?
rowid, instrument , reporttime
FROM
(
SELECT --assumed 3 digits minimum
SUBSTRING(datapath, PATINDEX('%[0-9][0-9][0-9]%', datapath), 8000) AS startOf,
rowid, instrument , reporttime
FROM
batchinfo --don't need LEN check. PATINDEX will do that implicitly
) foo
) batchinfo
JOIN qvalues ON batchinfo.rowid = qvalues.rowid
WHERE compound = 3 AND name = "hey"
AND batchinfo.instrument = 44
AND batchinfo.reporttime LIKE '10/%/2010%'";
如果我没看错,我认为您应该可以将第二个选择中的“数据路径”列分配给您在第一个选择中选择的值,并将“ startOf”替换为您为startOf选择的值。
我认为应该是这样的:
SELECT
reporttime,
'datapath' = LEFT(SUBSTRING(datapath, PATINDEX('%[0-9][0-9][0-9]%', datapath), 8000), PATINDEX('%[^0-9]%', SUBSTRING(datapath, PATINDEX('%[0-9][0-9][0-9]%', datapath), 8000))-1) ,
finalconc,
instrument
FROM batchinfo
JOIN qvalues ON batchinfo.rowid = qvalues.rowid
WHERE compound = 3 AND name = "hey"
AND batchinfo.instrument = 44
AND batchinfo.reporttime LIKE '10/%/2010%'";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.