2011-08-23 128 views
-1

我有一个非常简单的表,有企业和一列DisplayBiz = varchar(1)是Y或N ...我想要一个脚本从数据库中提取数据首先所有的“Y”,然后所有的“N”共十个,我希望他们按商家名称排列。SQL SELECT查询

有没有办法做到这一点?我假定这将是这样的:

SELECT TOP 10 MemberID, 
BizName 
ORDER BY BizType 

但这并不考虑到DisplayBiz列

任何想法?

非常感谢..!

+4

如果该列总是只有1个字符长 - 使它成为CHAR(1),并为VARCHAR部分节省2个字节的开销(这真的不会在这里发挥作用).... –

+3

+1 @marc_s - 我的pet peeve以及varchar(小于4的任何东西)' – JNK

+0

为什么不使用bit/boolean列呢? –

回答

3

可以BY子句中的顺序添加多个列:

-- ... 
ORDER BY DisplayBiz DESC, BizType 

这将使y行,然后再N行。

2

这将得到显示比例为'Y'的前10个按字母顺序排列的BizNames。如果有小于10,它将以重新开始对那些“N” ......

SELECT TOP 10 MemberID, BizName, DisplayBiz 
    FROM dbo.table 
    ORDER BY 
     CASE WHEN DisplayBiz = 'Y' THEN 1 ELSE 2 END, 
     BizName; 

您还可以使用:

ORDER BY 
    DisplayBiz DESC, 
    BizName; 

但我更喜欢CASE - 而更多的代码,你没有利用Y/N的英文拼写。似乎更加明确。