从SQL检索值

时间:2013-10-08 07:06:15

标签: c# sql database sql-server-2008

我正在处理SQL我需要在以下情况中触发值

我的问题是:

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

我的示例

我的表中有4列, AutoArtId empArtStage ArtStageCurrStat PgsCompleted

当我调用select * from my table where ArtStageCurrStat=S1010时。结果将是单行,没关系。

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

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

请参阅下面的图片

enter image description here

In Above image是我得到的结果,所以..

是否有可能从

提供输出

enter image description here

enter image description here

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

对此有任何建议......

2 个答案:

答案 0 :(得分: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

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

    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) - 和假设它是最古老和最新的相关记录对。在 this 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

答案 1 :(得分:1)

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

SELECT AutoArtId, empArtStage, min(PgsCompleted), max(PgsCompleted) 
FROM table GROUP BY AutoArtId, empArtStage;