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
值,但输出中只有一个值(与三个值完全不同)。为该列选择值的规则是什么?