0

我正在研究SQL其中我需要在以下情况下触发一个值

我的问题是:

我需要一个查询,它应该从单个 SQL 表中检索值,并且查询结果将在多行中,直到现在我没有遇到任何问题。现在我需要在单行中打印结果

我的例子

我的表中有 4 列,即AutoArtIdempArtStageArtStageCurrStatPgsCompleted

当我调用时select * from my table where ArtStageCurrStat=S1010。结果将在单行中,这很好。

但是当我像这样调用查询时select * from table,它会显示两行所有记录,因为我的表最初有两行。

现在我的问题是我是否应该有一个查询,该查询应该在从表中检索记录时将两行值合并为单行

参考我下面的图片

在此处输入图像描述

在上图中是我得到的结果,所以..

有没有可能给出输出

在此处输入图像描述

在此处输入图像描述

(我设计的这张图片,我期待这个结果)

对此有任何建议....

4

2 回答 2

2

根据所见,像这样的通用 SQL 查询会将这些行“扁平化”为单行(但 2 PgsCompleted 值需要不同的列名)。

    select
        AutoArtId
      , empArtStage
      , MIN(ArtStageCurrStat) as ArtStageCurrStat 
      , MIN(PgsCompleted) as PgsCompleted1
      , MAX(PgsCompleted) as PgsCompleted2
    from YourTable
    group by AutoArtId, empArtStage

出现一些关于多于或少于 2 行的问题,这可能会有所帮助:

    select
        AutoArtId
      , empArtStage
      , MIN(ArtStageCurrStat) as ArtStageCurrStat 
      , MIN(PgsCompleted) as PgsCompleted1
      , MAX(PgsCompleted) as PgsCompleted2
      , count(*) as num_of
    from YourTable
    group by AutoArtId, empArtStage
    having count(*) <> 2

这是一种使用 SQL 2008 中可用的 row_number() 的方法。它假设您在表中有一些字段可以区分最旧和最新(这里我使用了自动编号的 ID) - 并且假设最旧和最新的是相关记录对。在这个 sqlfiddle 中,我模拟了一些样本数据,代表一组 3 条记录和另一条记录。

SELECT
        AutoArtId
      , empArtStage
      , MIN(ArtStageCurrStat) AS ArtStageCurrStat
      , MIN(PgsCompleted) AS PgsCompleted1
      , MAX(PgsCompleted) AS PgsCompleted2
FROM (
      SELECT
              AutoArtId
            , empArtStage
            , ArtStageCurrStat
            , PgsCompleted
            , row_number() over (partition BY AutoArtId, empArtStage
                                  ORDER BY ID ASC) AS oldest
            , row_number() over (partition BY AutoArtId, empArtStage
                                  ORDER BY ID DESC) AS newest
      FROM YourTable
      ) AS derived
WHERE oldest = 1 OR newest = 1
GROUP BY
        AutoArtId
      , empArtStage
于 2013-10-08T07:14:22.147 回答
1

您可以使用 group by 并使用 MAX 和 MIN 获取两个值:

SELECT AutoArtId, empArtStage, min(PgsCompleted), max(PgsCompleted) 
FROM table GROUP BY AutoArtId, empArtStage;
于 2013-10-08T07:16:45.110 回答