<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[史考特部落格園地 - Database & SQL]]></title>
<link>http://www.pro-soho.com/Blog/</link>
<description><![CDATA[生命就該浪費在美好的事物上]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog2 v2.4]]></copyright>
<webMaster><![CDATA[scooter.tw@gmail.com(Scott)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>史考特部落格園地</title> 
	<url>http://www.pro-soho.com/Blog/images/logos.gif</url> 
	<link>http://www.pro-soho.com/Blog/</link> 
	<description>史考特部落格園地</description> 
</image>

			<item>
			<link>http://www.pro-soho.com/Blog/default.asp?id=268</link>
			<title><![CDATA[SQL Server日期函數CONVERT範例 ]]></title>
			<author>scooter.tw@gmail.com(admin)</author>
			<category><![CDATA[Database &amp; SQL]]></category>
			<pubDate>Sat,28 Jul 2007 14:22:22 +0800</pubDate>
			<guid>http://www.pro-soho.com/Blog/default.asp?id=268</guid>	
		<description><![CDATA[MS SQL Server中文版的預設日期datetime格式是yyyy-mm-dd hh:mm:ss.mmm<br/><br/>例如:<br/>sel&#101;ct getdate()<br/><br/>2004-09-12 11:06:08.177<br/><br/>SQL Server常用到日期格式轉換方式如下：<br/><br/>sel&#101;ct CONVERT(varchar, getdate(), 120 )<br/>2004-09-12 11:06:08<br/><br/>sel&#101;ct replace(replace(replace(CONVERT(varchar, getdate(), 120 ),’-&#39;,”),’ ‘,”),’:&#39;,”)<br/>20040912110608<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 111 )<br/>2004/09/12<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 112 )<br/>20040912<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 102 )<br/>2004.09.12<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 101 )<br/>09/12/2004<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 103 )<br/>12/09/2004<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 104 )<br/>12.09.2004<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 105 )<br/>12-09-2004<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 106 )<br/>12 09 2004<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 107 )<br/>09 12, 2004<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 108 )<br/>11:06:08<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 109 )<br/>09 12 2004 1<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 110 )<br/>09-12-2004<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 113 )<br/>12 09 2004 1<br/><br/>sel&#101;ct CONVERT(varchar(12) , getdate(), 114 )<br/>11:06:08.177<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.pro-soho.com/Blog/default.asp?id=222</link>
			<title><![CDATA[CROSS TABLE 交叉資料表查詢]]></title>
			<author>scooter.tw@gmail.com(admin)</author>
			<category><![CDATA[Database &amp; SQL]]></category>
			<pubDate>Sun,08 Oct 2006 12:52:02 +0800</pubDate>
			<guid>http://www.pro-soho.com/Blog/default.asp?id=222</guid>	
		<description><![CDATA[ 前言<br/><br/>　　在小舖上，不管是 ASP 或是 SQL 討論區，都有很多類似這樣重覆的問題：<br/><br/>請問:現有一資料表如下(time及color兩欄)<br/>time____________________color<br/>2005-08-27 12:33:31.781_紅<br/>2005-08-27 12:33:33.172_黃<br/>2005-08-27 07:01:31.203_白<br/>2005-08-28 10:03:28.125_黑<br/>2005-08-28 10:46:21.047_白<br/>2005-08-29 04:47:56.547_白<br/>2005-08-29 04:47:56.906_黑<br/>2005-08-29 07:01:31.031_紅<br/>2005-08-29 07:01:31.375_黃<br/>2005-08-29 08:23:14.016_紅<br/><br/>我想產生如下的資料表,請問sql該如何寫呢?<br/>因為time這個欄位不是取全部的值--無法使用group...能否請大家指點?感謝!<br/><br/>time_______紅_黃_白_黑<br/>2005-08-27_1__1__1__0<br/>2005-08-28_0__0__1__1<br/>2005-08-29_2__1__1__1<br/><br/><a href="http://www.blueshop.com.tw/board/show.asp?subcde=BRD20050921170322CNN" target="_blank">http://www.blueshop.com.tw/board/show.asp?subcde=BRD20050921170322CNN</a>&amp;fumcde=FUM200410061525290EW&amp;rplcnt=1<br/> <br/>方法<br/> <br/>　　類似這樣交叉查詢的問題，有以下二種解法。<br/> <br/>一、先取出不重覆的天數，再依照每一天去計算各種顏色的數量<br/> <br/>Sel&#101;ct DISTINCT CAST(CONVERT(VARCHAR, A.TIME_, 111) AS VARCHAR) AS FORMATETIME, <br/> (Sel&#101;ct COUNT(B.COLOR_) FROM COLOR B Wh&#101;re CAST(CONVERT(VARCHAR, B.TIME_, 111) AS VARCHAR) = CAST(CONVERT(VARCHAR, A.TIME_, 111) AS VARCHAR) AND COLOR_ = &#39;紅&#39; ) AS &#39;紅&#39;,<br/> (Sel&#101;ct COUNT(B.COLOR_) FROM COLOR B Wh&#101;re CAST(CONVERT(VARCHAR, B.TIME_, 111) AS VARCHAR) = CAST(CONVERT(VARCHAR, A.TIME_, 111) AS VARCHAR) AND COLOR_ = &#39;黃&#39; ) AS &#39;黃&#39;,<br/> (Sel&#101;ct COUNT(B.COLOR_) FROM COLOR B Wh&#101;re CAST(CONVERT(VARCHAR, B.TIME_, 111) AS VARCHAR) = CAST(CONVERT(VARCHAR, A.TIME_, 111) AS VARCHAR) AND COLOR_ = &#39;白&#39; ) AS &#39;白&#39;,<br/> (Sel&#101;ct COUNT(B.COLOR_) FROM COLOR B Wh&#101;re CAST(CONVERT(VARCHAR, B.TIME_, 111) AS VARCHAR) = CAST(CONVERT(VARCHAR, A.TIME_, 111) AS VARCHAR) AND COLOR_ = &#39;黑&#39; ) AS &#39;黑&#39;<br/>FROM COLOR A<br/> <br/>二、每跑一筆記錄，就計算其顏色的數量，最後才用GROUP BY的方式進行加總<br/> <br/>Sel&#101;ct CAST(CONVERT(VARCHAR, A.TIME_, 111) AS VARCHAR) AS FORMATETIME, <br/> SUM(CASE COLOR_ WHEN &#39;紅&#39; THEN 1 ELSE 0 END) AS &#39;紅&#39;,<br/> SUM(CASE COLOR_ WHEN &#39;黃&#39; THEN 1 ELSE 0 END) AS &#39;黃&#39;,<br/> SUM(CASE COLOR_ WHEN &#39;白&#39; THEN 1 ELSE 0 END) AS &#39;白&#39;,<br/> SUM(CASE COLOR_ WHEN &#39;黑&#39; THEN 1 ELSE 0 END) AS &#39;黑&#39;<br/>FROM COLOR A<br/>GROUP BY CAST(CONVERT(VARCHAR, A.TIME_, 111) AS VARCHAR)<br/>]]></description>
		</item>
		
			<item>
			<link>http://www.pro-soho.com/Blog/default.asp?id=220</link>
			<title><![CDATA[關於 SQL 之 disctinct(1)]]></title>
			<author>scooter.tw@gmail.com(admin)</author>
			<category><![CDATA[Database &amp; SQL]]></category>
			<pubDate>Thu,05 Oct 2006 10:37:08 +0800</pubDate>
			<guid>http://www.pro-soho.com/Blog/default.asp?id=220</guid>	
		<description><![CDATA[經常會有朋友問到類似於這樣的問題，<br/>資料表中的資料如下<br/>ID&nbsp;&nbsp; AA&nbsp;&nbsp; BB&nbsp;&nbsp;&nbsp;&nbsp;<br/>1&nbsp;&nbsp;&nbsp;&nbsp;123&nbsp;&nbsp; 456<br/>1&nbsp;&nbsp;&nbsp;&nbsp;4535 54<br/>1&nbsp;&nbsp;&nbsp;&nbsp;60&nbsp;&nbsp;&nbsp;&nbsp; 6564<br/>1&nbsp;&nbsp;&nbsp;&nbsp;60&nbsp;&nbsp;&nbsp;&nbsp; 656<br/>2&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp; 664<br/>2&nbsp;&nbsp;&nbsp;&nbsp;60&nbsp;&nbsp;&nbsp;&nbsp; 6<br/>3&nbsp;&nbsp;&nbsp;&nbsp;89&nbsp;&nbsp;&nbsp;&nbsp; 89<br/>4&nbsp;&nbsp;&nbsp;&nbsp;40&nbsp;&nbsp;&nbsp;&nbsp; 4242<br/><br/>希望得到的結果是<br/>ID&nbsp;&nbsp; AA&nbsp;&nbsp; BB<br/>1&nbsp;&nbsp;&nbsp;&nbsp;123&nbsp;&nbsp; 456<br/>2&nbsp;&nbsp;&nbsp;&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp; 664<br/>3&nbsp;&nbsp;&nbsp;&nbsp;89&nbsp;&nbsp;&nbsp;&nbsp; 89<br/>4&nbsp;&nbsp;&nbsp;&nbsp;40&nbsp;&nbsp;&nbsp;&nbsp; 4242<br/><br/>當然了，環境是SQL Server (Access也可以)<br/><br/>解答及分析如下：<br/>1， 不少朋友希望用distinct就解決問題，但不可能，disctinct將重複的記錄忽略，但它忽略的是完全一致的重複記錄，而不是其中某個欄位重複的記錄，所以也只有這樣的語法<br/><br/>sel&#101;ct distinct ID,AA,BB from tName<br/>其他諸如sel&#101;ct distinct(ID),AA,BB from tName 或<br/>sel&#101;ct ID,distinct AA,BB的寫法都是無效的<br/><br/>2, 使用group by和聚合函數<br/>sel&#101;ct ID,MAX(AA) AS AA,MAX(BB) AS BB from tName group by ID<br/>可以得到如下結果<br/>ID&nbsp;&nbsp; AA&nbsp;&nbsp; BB<br/>1&nbsp;&nbsp;&nbsp;&nbsp;4535 6564<br/>2&nbsp;&nbsp;&nbsp;&nbsp;60&nbsp;&nbsp; 664<br/>3&nbsp;&nbsp;&nbsp;&nbsp;89&nbsp;&nbsp; 89<br/>4&nbsp;&nbsp;&nbsp;&nbsp;40&nbsp;&nbsp; 4242<br/>ID是唯一了，但不一定後面的欄位是同一條記錄的<br/><br/>3, 使用臨時表<br/>sel&#101;ct IDENTITY(INT,1,1) as TID,ID,AA,BB into #Tmp from tName<br/>sel&#101;ct t1.ID,t1.AA,t1.BB from #Tmp t1 wh&#101;re t1.TID in <br/>(sel&#101;ct min(T2.TID) from #Tmp t2 group by t2.ID)<br/>這樣可以得到符合要求的結果<br/>不過用了兩個T-SQL語句，而且如果是大資料量的話，性能問題將很突出到目前為止，我還沒找到用一個T-SQL語句實現同樣功能的方法，如果誰有，希望補充]]></description>
		</item>
		
</channel>
</rss>