如何根据条件选择组的特定记录

时间:2015-09-01 13:14:29

标签: sql-server

我试图对一组数据进行分组,对于某些字段,我需要根据ttype选择一个特定值,例如我有以下几行:

caseid  age   iss   gcs    ttype
00170   64    25    17     Transfer Out
00170   64    27    15     Transfer In
00201   24    14    40     Transfer In

如果caseID有ttype'转出'我想使用此行中的ISS和GCS值,否则使用'转入'中的值。行。

基于以上示例的我想要的输出是:

caseid  age  iss   gcs
00170   64   25    17
00201   24   14    40

我当前的选择声明是:

select caseid, max(age), max(iss), max(gcs)
from Table1
group by caseid

我所知道的不正确,但如何从特定行指定ISS和GCS的值?

由于

编辑 - 我不总是需要从扩展数据中的Row1,下表中选择:

caseid  age   iss   gcs  los  ttype          disdate
170     64    25    17   5    Transfer Out   2014-01-02 00:00:00.000
170     64    27    15   1    Transfer In    2014-01-04 00:00:00.000
201     24    14    40   4    Transfer In    2014-01-04 00:00:00.000

在这种情况下,我想要row1的最大年龄和ISS和GCS数字,但是我需要对LOS求和并选择第2行的disdate(即最新日期),所以我的输出将是:< / p>

caseid  age   iss   gcs  los  disdate
170     64    25    17   6    2014-01-04
201     24    14    40   4    2014-01-04

这可能吗?

2 个答案:

答案 0 :(得分:2)

您可以使用CTE和ROW_NUMBER + Over - 条款(根据您更新的问题编辑):

WITH CTE AS
(
   SELECT caseid,  age,  iss, gcs, los, ttype, disdate,
          SumLos = SUM(los) OVER (PARTITION BY caseid),
          LatestDisDate = MAX(disdate) OVER (PARTITION BY caseid),
          rn = ROW_NUMBER() OVER (PARTITION BY caseid 
                                  ORDER BY CASE WHEN ttype = 'Transfer Out' 
                                       THEN 0 ELSE 1 END ASC, disdate ASC)
   FROM dbo.Table1
)
SELECT caseid, age,  iss,  gcs, los = SumLos, disdate = LatestDisDate
FROM CTE
WHERE rn = 1

Demo

答案 1 :(得分:0)

我认为这就是你所需要的 -

QString hist::inputstring() {

QModelIndexList templatelist =
ui->listView->selectionModel()->selectedIndexes();
QString  stringlist;
foreach (const QModelIndex &index, templatelist) {
stringlist.append(index.data(Qt::DisplayRole).toString());
}
return stringlist;
}
相关问题