Case When 解决简单的"是"与"否"

昨天晚上买了一个sql的新书,特别的高兴,晚上就阅读了很多,突然发现以前经常在SQL中使用的case when的用法,以前在csdn上面看到好多,但是就是不知道怎么用,可能那个时候还没有用到的地方,不过现在就不一样了,看过那短短的3页纸之后,加强领悟了一个已经领悟的道理:书本还是要的,网络不可以解决所有的问题!
至于case when用在那里,我在这里只是用到了一小部分,一个是与否的问题;
如图所示:

以前的做法是在DataGrid_ItemDataBound事件里面处理,
大概的做法是这样写的
 1 Private Sub DataGrid1_ItemDataBound(ByVal sender As System.Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles Datagrid1.ItemDataBound
 2                If (e.Item.ItemIndex <> -1Then
 3            ' e.Item.Cells(1).Text = System.Convert.ToString(e.Item.ItemIndex + 1 + DataGrid1.CurrentPageIndex * DataGrid1.PageSize)
 4            If e.Item.Cells(5).Text.ToString = "False" Then
 5                e.Item.Cells(5).Text = "没有通过"
 6                e.Item.BackColor = Color.LightSkyBlue
 7
 8            Else
 9                If e.Item.Cells(5).Text = "True" Then
10                    e.Item.Cells(5).Text = "已经通过"
11                End If
12            End If
13        End If
14    End Sub
超级麻烦,不过可以定义背景颜色,也很不错
昨天看了case when的用法之后,才知道不要那么麻烦了
 1Select
 2a.UserBorrowID,a.UserID,a.BookID,a.BorrowDate,b.UserName,c.Title ,a.GoOnDate,a.IsReturn,
 3a.IsGoOn,
 4a.ReturnDate,
 5    case a.IsGoOn 
 6    when 1 then ''
 7    when 0 then ''
 8    END As IsGoOnBorrow,
 9    case a.IsReturn 
10    when 1 then ''
11    when 0 then ''
12    End as IsReturn1
13from Library_Borrows as a,Library_books as c,Library_Users as b 
14where
15a.bookid=c.bookid and a.userid=b.UserID  and a.UserID=@UserID
16ORDER BY a.ModifyDate DESC
^_^,建立一个存储过程,然后就不用再ItemBound里面写了。这样就可以解决问题,当然还可以拓展开来,比如可以用case when 的搜索形式进行变换字符串 case when GoOndate<... then '通过' 这样就可以减少在.vb中写代码了。
但是现在还不知道性能怎么样,因为我对测试性能是一无所知。
原文地址:https://www.cnblogs.com/xucanzhao/p/273284.html