我正在处理SQL
我需要在以下情况中触发值
我的问题是:
我需要一个查询,它应该从单个SQL表中检索值,并且查询结果将在多行中,直到现在我没有遇到任何问题。现在我需要以单行打印结果
我的示例
我的表中有4列, AutoArtId , empArtStage , ArtStageCurrStat , PgsCompleted
当我调用select * from my table where ArtStageCurrStat=S1010
时。结果将是单行,没关系。
但是当我调用像select * from table
这样的查询时,它会显示包含所有记录的两行,因为我的表最初有两行。
现在我的问题是我是否有一个查询应该将两行值合并为单行,同时从表中检索记录
请参阅下面的图片
In Above image是我得到的结果,所以..
是否有可能从
提供输出
到
(我设计的这张照片,我期待这个结果)
对此有任何建议......
答案 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;