Tsql-有没有一种有效的方法来查询这个问题?

Tsql-有没有一种有效的方法来查询这个问题?,sql,tsql,Sql,Tsql,有没有一种有效或简单的方法来查询这个问题?例如,最小化服务器负载。谢谢 数据库表 qId WKDT WK_ENDT SUM_LVL_Sort ADOCD ocd OfficeName WKLY_AVG WeekCode ------ ------ ----------------------- ------------ ----- --- ------------- -------- -------- 201112

有没有一种有效或简单的方法来查询这个问题?例如,最小化服务器负载。谢谢

数据库表

qId     WKDT    WK_ENDT                  SUM_LVL_Sort  ADOCD  ocd  OfficeName     WKLY_AVG  WeekCode
------  ------  -----------------------  ------------  -----  ---  -------------  --------  --------
201112  201110  2011-10-28 00:00:00.000  19.00         NULL   NAT  NATION         2.23      n
201112  201110  2011-10-28 00:00:00.000  13.00         NULL   F09  SAN FRANCISCO  2.20      n
201112  201111  2011-11-25 00:00:00.000  19.00         NULL   NAT  NATION         2.39      n
201112  201111  2011-11-25 00:00:00.000  13.00         NULL   F09  SAN FRANCISCO  2.14      n
201112  201112  2011-12-30 00:00:00.000  19.00         NULL   NAT  NATION         2.37      n
201112  201112  2011-12-30 00:00:00.000  13.00         NULL   F09  SAN FRANCISCO  2.18      n
这就是我需要的布局

WK_ENDT                  adocd  ocd  OfficeName     SUM_LVL_Sort  10    11    12
-----------------------  -----  ---  -------------  ------------  ----  ----  ----
2011-10-07 00:00:00.000  NULL   F09  SAN FRANCISCO  13.00         2.2   2.14  2.18
2011-10-07 00:00:00.000  NULL   NAT  NATION         19.00         2.23  2.39  2.37
tql查询

 select TOP 1 (WK_ENDT),
     ,SUM_LVL_Sort
     ,ADOCD     as adocd
     ,Alias   as ocd
     ,OfficeName
     ,(select WKLY_AVG from kpi.dbo.tb_ssi_rzli where SUM_LVL_Sort = 19.00 and RIGHT(wkdt,2) = '10' and weekcode = 'n'  ) as [10]
     ,(select WKLY_AVG from kpi.dbo.tb_ssi_rzli where SUM_LVL_Sort = 19.00 and RIGHT(wkdt,2) = '11' and weekcode = 'n'  ) as [11]
     ,(select WKLY_AVG from kpi.dbo.tb_ssi_rzli where SUM_LVL_Sort = 19.00 and RIGHT(wkdt,2) = '12' and weekcode = 'n'  ) as [12]
from kpi.dbo.tb_ssi_rzli
where SUM_LVL_Sort = 19.00 and right(qId,2) = '12' and WeekCode = 'n'
order by WK_ENDT desc
蓝脚怪的查询结果

WK_ENDT                  SUM_LVL_Sort  adocd  ocd  OfficeName  10    11    12
-----------------------  ------------  -----  ---  ----------  ----  ----  ----
2011-12-30 00:00:00.000  19.00         NULL   NAT  NATION      NULL  NULL  2.37
2011-11-25 00:00:00.000  19.00         NULL   NAT  NATION      NULL  2.39  NULL
2011-10-28 00:00:00.000  19.00         NULL   NAT  NATION      2.23  NULL  NULL
你试过这个吗:

select  (WK_ENDT),
     ,SUM_LVL_Sort
     ,ADOCD   as adocd
     ,Alias   as ocd
     ,OfficeName
     , CASE WHEN RIGHT(wkdt,2) = '10' THEN WKLY_AVG END As [10]
     , CASE WHEN RIGHT(wkdt,2) = '11' THEN WKLY_AVG END As [11]
     , CASE WHEN RIGHT(wkdt,2) = '12' THEN WKLY_AVG END As [12]
from kpi.dbo.tb_ssi_rzli
where SUM_LVL_Sort = 19.00 
    and right(qId,2) = '12'
    --and RIGHT(wkdt,2) IN ('10', '11', '12')
    and WeekCode = 'n'
order by WK_ENDT desc 
编辑尝试此操作,看起来您想要基于月份获取值:

选择前1名(工作日结束),
,和级排序
,ADOCD作为ADOCD
,别名为强迫症
,官方名称
,如果月份(wkdt)=“10”,则WKLY_平均值结束为[10]
,如果月份(wkdt)=“11”,则WKLY_平均值结束为[11]
,如果月份(wkdt)=“12”,则WKLY_平均值结束为[12]
来自kpi.dbo.tb_ssi_rzli
其中SUM_LVL_Sort=19.00
右(qId,2)='12'
和WeekCode='n'
按工作说明下单

您是否尝试过以下方法:

select  (WK_ENDT),
     ,SUM_LVL_Sort
     ,ADOCD   as adocd
     ,Alias   as ocd
     ,OfficeName
     , CASE WHEN RIGHT(wkdt,2) = '10' THEN WKLY_AVG END As [10]
     , CASE WHEN RIGHT(wkdt,2) = '11' THEN WKLY_AVG END As [11]
     , CASE WHEN RIGHT(wkdt,2) = '12' THEN WKLY_AVG END As [12]
from kpi.dbo.tb_ssi_rzli
where SUM_LVL_Sort = 19.00 
    and right(qId,2) = '12'
    --and RIGHT(wkdt,2) IN ('10', '11', '12')
    and WeekCode = 'n'
order by WK_ENDT desc 
编辑尝试此操作,看起来您想要基于月份获取值:

选择前1名(工作日结束),
,和级排序
,ADOCD作为ADOCD
,别名为强迫症
,官方名称
,如果月份(wkdt)=“10”,则WKLY_平均值结束为[10]
,如果月份(wkdt)=“11”,则WKLY_平均值结束为[11]
,如果月份(wkdt)=“12”,则WKLY_平均值结束为[12]
来自kpi.dbo.tb_ssi_rzli
其中SUM_LVL_Sort=19.00
右(qId,2)='12'
和WeekCode='n'

按WK_ENDT desc下单

@user1672932请查看我的编辑。如果不是这样,那么您需要为
wkdt
提供相同的数据,因为您提供的示例中不包含该数据。什么是
qId
不包括在内either@user1672932再次查看我的编辑,您将使用第一个查询。删除
TOP 1
以返回所有记录,因为您只有一条记录。结果返回3条记录(如上),是否有方法返回包含所有值的单个记录,谢谢。@user1672932有3条记录,因为返回的
WK_ENDT
有3个不同的值。如果你只想要一个,那么你需要决定要哪一个return@user1672932请看我的编辑。如果不是这样,那么您需要为
wkdt
提供相同的数据,因为您提供的示例中不包含该数据。什么是
qId
不包括在内either@user1672932再次查看我的编辑,您将使用第一个查询。删除
TOP 1
以返回所有记录,因为您只有一条记录。结果返回3条记录(如上),是否有方法返回包含所有值的单个记录,谢谢。@user1672932有3条记录,因为返回的
WK_ENDT
有3个不同的值。如果只需要一个值,则需要决定为每个
OfficeName
返回哪一个值,源中有三个不同的
WK_ENDT
值,但输出中只有一个值(与三个值完全不同)。为该列选择值的规则是什么?对于每个
OfficeName
,源中有三个不同的
WK\u ENDT
值,但输出中只有一个值(与三个值完全不同)。为该列选择值的规则是什么?