Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何基于第一个查询运行第二个查询?_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 如何基于第一个查询运行第二个查询?

Sql 如何基于第一个查询运行第二个查询?,sql,sql-server,tsql,Sql,Sql Server,Tsql,Im使用两个查询,第一个是将一列分隔为两列,插入一个表,第二个是基于插入表的查询透视获取 第一项质询 SELECT A.MDDID, A.DeviceNumber, Split.a.value('.', 'VARCHAR(100)') AS MetReading FROM ( SELECT MDDID,DeviceNumber, CAST ('<M>' + REPLACE(Ht

Im使用两个查询,第一个是将一列分隔为两列,插入一个表,第二个是基于插入表的查询透视获取

第一项质询

SELECT A.MDDID, A.DeviceNumber,  
          Split.a.value('.', 'VARCHAR(100)') AS MetReading
      FROM  (
             SELECT MDDID,DeviceNumber,  
                    CAST ('<M>' + REPLACE(Httpstring, ':', '</M><M>') + '</M>' AS XML) AS MetReading  
               FROM  [IOTDBV1].[dbo].[MDASDatas] E
               Where E.MDDID = 49101
             ) AS A CROSS APPLY MetReading.nodes ('/M') AS Split(a);
第二个问题

SELECT * FROM 
        (
           Select ID,MDDID,DeviceNumber,ReceivedDate
            , ROW_NUMBER() OVER(PARTITION BY ID ORDER BY (SELECT 1)) AS ID2
            , SPLT.MR.value('.','VARCHAR(MAX)') AS LIST FROM ( 
                        Select ID,MDDID,DeviceNumber,ReceivedDate
                                    , CAST( '<M>'+REPLACE(MeterReading,',','</M><M>')+'</M>' AS XML) AS XML_MR 
                                    From [dbo].[PARSEMDASDatas] E
                                    Where E.MeterReading is Not Null
                                    )E
                                    CROSS APPLY  E.XML_MR.nodes('/M') AS SPLT(MR)
                                    )A
                                    PIVOT
                                    (
                                        MAX(LIST) FOR ID2 IN ([1],[2],[3],[4],[5],[6],[7],[8])
                                    )PV
我希望在第一个查询的基础上运行第二个查询,而不需要表。
任何帮助都将不胜感激。

您的问题不是很清楚。。。这是一个很好的例子,为什么您总是要添加一个,包括DDL、样本数据、自己的尝试、错误的输出和预期的输出。这次我为你做这件事,请你下次自己准备这样一个MCVE

如果我没有弄错,您的源表包含一个最多8个CSV列?价值观这可能更容易解决,不需要将其分解为两个查询,不需要中间表,甚至不需要PIVOT

-为简洁起见,创建一个模型表来模拟您的情况 声明@YourTable TABLEID INT,MDDID INT,DeviceNumber VARCHAR100,MetReading VARCHAR2000; 在@YourTable值中插入 249101,“NKLDEVELOPMENT02”,“DCPL,9811152474849409”-字符代码和一些数字 ,349101,'NKLDEVELOPMENT02','SPPL,,,,,,,,,-第个空逗号 ,449101,'NKLDEVELOPMENT02','BLAH','999','-中间的某个值 -cte将按原样返回表格。唯一的区别是转换为XML,正如您所做的一样

WITH Splitted AS
(
    SELECT ID
          ,MDDID
          ,DeviceNumber
          ,CAST('<x>' + REPLACE(MetReading,',','</x><x>') + '</x>' AS XML) AS Casted
    FROM @YourTable t
)
SELECT s.ID
      ,s.MDDID
      ,s.DeviceNumber
      ,s.Casted.value('/x[1]','varchar(100)') AS [1]
      ,s.Casted.value('/x[2]','varchar(100)') AS [2]
      ,s.Casted.value('/x[3]','varchar(100)') AS [3]
      ,s.Casted.value('/x[4]','varchar(100)') AS [4]
      ,s.Casted.value('/x[5]','varchar(100)') AS [5]
      ,s.Casted.value('/x[6]','varchar(100)') AS [6]
      ,s.Casted.value('/x[7]','varchar(100)') AS [7]
      ,s.Casted.value('/x[8]','varchar(100)') AS [8]
FROM Splitted s;
简而言之:

每个CSV都转换为类似以下内容的XML:

<x>DCPL</x>
<x>981115</x>
<x>247484</x>
<x>9409</x>

使用XPath中的位置谓词,我们可以轻松调用第一个、第二个和第三个

您可以在第一次查询中准备一些数据,在第二次查询中准备用户

 WITH cte_table AS
    (
        SELECT  *
        FROM sys.objects
    )
    SELECT *
    FROM cte_table
    where name  like 'PK%'

基于第一次查询运行第二次查询是什么意思?您可以在CTE上包装第一个,然后在第二个上使用它,或者直接作为子查询使用。在最坏的情况下,您可以使用光标循环第一个行,然后使用第二个行,但如果您没有光标,则不建议您这样做。您能否为我们提供实际查询,第一个查询将数据插入表中,第二个查询使用表中的数据?您好,我添加了图像第一个表和结果查询,请检查您好,shnugo它的解决方案谢谢
 WITH cte_table AS
    (
        SELECT  *
        FROM sys.objects
    )
    SELECT *
    FROM cte_table
    where name  like 'PK%'