繁体   English   中英

SQL Server 2008:结合两个复杂的查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM