在SQL函数中排序 [英] Sorting in SQL Functions

查看:82
本文介绍了在SQL函数中排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有返回表的功能.

I have function which returns a table.

Id      Name    Total   Status         
1	Kitu	565	SC
2	Kavya	576	FC
3	rajni	98	07/08/2011
4	devi	49	07/05/2010
5	laya	637	FC
6	gita	32	09/08/2011
7	guru	981	FCD
8	dev	63	07/05/2012
9	magi	45	09/10/2011
10	malya	562	SC
11	Kavi	56	09/10/2011
12	raki	89	SC
13	Rana	56	18/04/2011
14	rajiv	56	01/04/2011
15	ravi	56	09/09/2011
16	surya	56	26/04/2011
17	dev	56	06/05/2011
18	dina	56	12/1/2011


SELECT  * FROM [dbo].[fn_get_Student]() ORDER BY 
CASE
    WHEN ISDATE( [Status] ) = 1 THEN CONVERT( VARCHAR(50), CONVERT( DATETIME, [Status] ), 112 )
    ELSE [Status]
END


结果:


Result:

Id      Name    Total   Status
13	Rana	56	18/04/2011
4	devi	49	07/05/2010
14	rajiv	56	01/04/2011
17	dev	56	06/05/2011
3	rajni	98	07/08/2011
6	gita	32	09/08/2011
15	ravi	56	09/09/2011
9	magi	45	09/10/2011
11	Kavi	56	09/10/2011
18	dina	56	12/1/2011
8	dev	63	07/05/2012
16	surya	56	26/04/2011
5	laya	637	FC
2	Kavya	576	FC
7	guru	981	FCD
1	Kitu	565	SC
12	raki	89	SC
10	malya	562	SC



状态列由日期和nvarchar值组成.如您所见,状态日期栏的格式不正确.



Status Column Consists of both date and nvarchar values. As you can see the date of status column, which is not sorted in correct format.

Is there any other approch to achive the task?

推荐答案

即使结果来自函数,列也应始终排序良好.但是,可能的问题可能是返回列的数据类型错误,例如,当应使用double时为字符串等.

如果不是这种情况,请发布数据示例以及数据的排序方式(错误的结果)
Columns should always sort nicely even if the results come from a function. However a possible problem could be that the datatype of the returning column is wrong, for example string when double should be used etc.

If that''s not the case, please post an example of the data and how it''s sorted (wrong results)


此查询显示如何使用case语句进行排序.希望对您有所帮助.

This query shows how can sort using case statements. I hope this helps.

SET DATEFORMAT DMY

IF OBJECT_ID( 'tempdb..#TEMP' ) IS NOT NULL
    BEGIN
    DROP TABLE #TEMP
    END
CREATE TABLE #TEMP
    (
    [Id]        INT,
    [Name]      VARCHAR(50),
    [Total]     INT,
    [Status]    VARCHAR(50)
    
    )
INSERT INTO #TEMP([Id],[Name],[Total],[Status])
SELECT  1,  'Kitu',     565,    'SC'            UNION ALL
SELECT  2,  'Kavya',    576,    'FC'            UNION ALL
SELECT  3,  'rajni',    98,     '07/08/2011'    UNION ALL
SELECT  4,  'devi',     49,     '07/05/2010'    UNION ALL
SELECT  5,  'laya',     637,    'FC'            UNION ALL
SELECT  6,  'gita',     32,     '09/08/2011'    UNION ALL
SELECT  7,  'guru',     981,    'FCD'           UNION ALL
SELECT  8,  'dev',      63,     '07/05/2012'    UNION ALL
SELECT  9,  'magi',     45,     '09/10/2011'    UNION ALL
SELECT  10, 'malya',    562,    'SC'


SELECT  *
FROM    #TEMP
ORDER
BY      CASE
            -- when [Status] is date then converts date from MM/DD/YYYY format to YYYYMMDD FORMAT
            WHEN ISDATE( [Status] ) = 1 THEN CONVERT( VARCHAR(50), CONVERT( DATETIME, [Status] ), 112 )
            ELSE [Status]
        END


如果函数返回带有任何数据类型的RunningBalance列的表.可以与上述查询配合使用.
If the function return the table with RunningBalance column of any datatype . its working fine with above query.


这篇关于在SQL函数中排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆