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_Tsql - Fatal编程技术网

两个查询合并(SQL)

两个查询合并(SQL),sql,tsql,Sql,Tsql,我有两个问题,但我不知道如何合并它们。我正在努力实现插入到列表中的最新价格 第一个是: SELECT ITM.CODE ,itm.NAME ,min(isnull(price,0)) [min price] ,max(isnull(price,0)) [max] ,SUM(total)/SUM(amount) as [avr] FROM LG_092_ITEMS ITM INNER JOIN LG_092_01_STLINE STL

我有两个问题,但我不知道如何合并它们。我正在努力实现插入到列表中的最新价格

第一个是:

SELECT     
     ITM.CODE
    ,itm.NAME
    ,min(isnull(price,0)) [min price] 
    ,max(isnull(price,0)) [max]
    ,SUM(total)/SUM(amount) as [avr] 
FROM LG_092_ITEMS ITM 
INNER JOIN LG_092_01_STLINE STL 
    ON ITM.LOGICALREF = STL.STOCKREF
WHERE PRICE > 0 
    AND TRCODE = 1 
    AND CANCELLED = 0 
    AND INVOICEREF > 0
GROUP BY ITM.name , itm.code
ORDER BY code
第二个是:

SELECT
    ITM.CODE, itm.NAME, max (stl.date_) [latest date] , price as [latest price]

FROM LG_092_ITEMS ITM 
INNER JOIN LG_092_01_STLINE STL 
    ON ITM.LOGICALREF = STL.STOCKREF
WHERE PRICE > 0 
    AND TRCODE = 1 
    AND CANCELLED = 0 
    AND INVOICEREF > 0 


    group by code, name, stl.DATE_ , price

您要查找的关键字是
JOIN


UNION子句将合并两个查询,只保留唯一的值。

不是最优雅的,但我认为它会起作用:)

有关CTE的更多信息,请参阅:


当价格>0时,您不需要isnull

我们在我朋友的帮助下找到了另一种方法。。。希望这对其他人也有帮助

SELECT ITM.CODE
    ,itm.NAME
    ,min(isnull(STL.price, 0)) [min price]
    ,max(isnull(STL.price, 0)) [max]
    ,SUM(total) / SUM(amount) AS [avr]
    --SON SATINALMA FIYATI
    ,ISNULL((SELECT TOP 1 PRC.PRICE FROM LG_092_01_STLINE AS PRC
    WHERE PRC.STOCKREF = ITM.LOGICALREF
        AND PRC.PRICE > 0
        AND PRC.TRCODE = 1
        AND PRC.CANCELLED = 0
        AND PRC.INVOICEREF > 0
    ORDER BY PRC.DATE_ DESC), 0) AS latestprice  
FROM LG_092_ITEMS AS ITM
INNER JOIN LG_092_01_STLINE AS STL ON ITM.LOGICALREF = STL.STOCKREF
WHERE STL.PRICE > 0
    AND TRCODE = 1
    AND CANCELLED = 0
    AND INVOICEREF > 0
GROUP BY ITM.LOGICALREF, ITM.CODE, ITM.NAME
ORDER BY ITM.CODE

这可能是一条评论,op正在寻找SQLServer谢谢语言提示。在未指定语言的情况下编写了答案,但应该编写Oracle链接只是一个示例引用。我想先发表评论,但后来我认为“使用连接”是“如何合并?”的答案,所以我将我的答案作为答案发布。不鼓励这种行为吗?答案通常是解决OP问题的完整答案。评论用于链接到有用信息和其他问题。我认为在这个例子中很明显,OP知道如何根据提供的示例查询进行连接,并在select?Msg 156的15级状态1的第2行中使用不同数量的列,关键字“FROM”附近的语法不正确。Msg 156,级别15,状态1,第12行关键字“GROUP”附近的语法不正确。第二个查询有效吗?请提供表的结构和一些示例数据?@UmutK:请检查如何更快地请求和获得帮助:亲爱的@TheGameiswar,您是正确的,查询应如下。在ITM1.LOGICALREF=stl.STOCKREF上选择ITM1.CODE、ITM1.NAME、max(stl.date_uu2;)[最新日期],从LG_092_项目ITM1内部连接LG_092_01_2;STLINE stl中选择[最新价格],其中价格>0,TRCODE=1,取消=0,发票参考>0按代码、名称、stl.date分组,价格谢谢您的时间,但不工作。。。Msg 8120,级别16,状态1,第5行“LG_092_01_STLINE.PRICE”列在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。还有其他建议吗@m-grueJust是一个不需要的小组:)工作起来很有魅力!谢谢!我的另一个问题是,我不能使用以“with”开头的查询和“union all”一起使用任何建议?只需将“with CTE AS(…)”移到顶部,它就会工作。感谢您的时间和努力,但出现错误:Msg 1033,Level 15,State 1,Line 21 ORDER BY子句在视图、内联函数、派生表、子查询中无效,和通用表表达式,除非还指定了TOP或FOR XML。仍然缺少某些内容…'Msg 8120,级别16,状态1,第5行列“LG_092_ITEMS.CODE”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。“我当然尝试了更新的列(不包含GROUP BY的列),并编写了新的错误消息……我无法想象您将如何获得该消息。”。如果没有GROUPBY子句,为什么SQL会发出该消息?对不起,我帮不上忙。
with CTE AS (
    SELECT ITM.CODE
        ,itm.NAME
        ,STL.price AS [latestprice]
        ,ROW_NUMBER() OVER (PARTITION BY ITM.CODE, itm.NAME ORDER BY stl.date_ desc) AS RowN
    FROM LG_092_ITEMS AS ITM
    JOIN LG_092_01_STLINE AS STL ON ITM.LOGICALREF = STL.STOCKREF
    WHERE STL.price > 0
        AND TRCODE = 1
        AND CANCELLED = 0
        AND INVOICEREF > 0
)
SELECT ITM.CODE
    ,itm.NAME
    ,min(isnull(STL.price, 0)) [min price]
    ,max(isnull(STL.price, 0)) [max]
    ,SUM(total) / SUM(amount) AS [avr]
    ,max(CTE.latestprice) AS latestprice
FROM LG_092_ITEMS AS ITM
JOIN LG_092_01_STLINE AS STL ON ITM.LOGICALREF = STL.STOCKREF
JOIN CTE ON CTE.CODE = itm.code AND CTE.name = ITM.name AND CTE.RowN = 1
WHERE STL.price > 0
    AND TRCODE = 1
    AND CANCELLED = 0
    AND INVOICEREF > 0
GROUP BY ITM.NAME,itm.code
ORDER BY itm.code 
 select * 
 from 
 (
 SELECT     
     ITM.CODE
    ,itm.NAME
    ,isnull(price,0) as [latest price]
    ,min(isnull(price,0))   over (partition by ITM.name, itm.code) as [min price] 
    ,max(isnull(price,0))   over (partition by ITM.name, itm.code) as [max]
    ,SUM(total)/SUM(amount) over (partition by ITM.name, itm.code) as [avr]   
    ,row_number()           over (partition by ITM.name, itm.code order by stl.date_ desc) as rn
FROM LG_092_ITEMS ITM 
INNER JOIN LG_092_01_STLINE STL 
    ON ITM.LOGICALREF = STL.STOCKREF
WHERE PRICE > 0 
    AND TRCODE = 1 
    AND CANCELLED = 0 
    AND INVOICEREF > 0    
) tt
where tt.rn = 1
ORDER BY code
SELECT ITM.CODE
    ,itm.NAME
    ,min(isnull(STL.price, 0)) [min price]
    ,max(isnull(STL.price, 0)) [max]
    ,SUM(total) / SUM(amount) AS [avr]
    --SON SATINALMA FIYATI
    ,ISNULL((SELECT TOP 1 PRC.PRICE FROM LG_092_01_STLINE AS PRC
    WHERE PRC.STOCKREF = ITM.LOGICALREF
        AND PRC.PRICE > 0
        AND PRC.TRCODE = 1
        AND PRC.CANCELLED = 0
        AND PRC.INVOICEREF > 0
    ORDER BY PRC.DATE_ DESC), 0) AS latestprice  
FROM LG_092_ITEMS AS ITM
INNER JOIN LG_092_01_STLINE AS STL ON ITM.LOGICALREF = STL.STOCKREF
WHERE STL.PRICE > 0
    AND TRCODE = 1
    AND CANCELLED = 0
    AND INVOICEREF > 0
GROUP BY ITM.LOGICALREF, ITM.CODE, ITM.NAME
ORDER BY ITM.CODE