發表文章

目前顯示的是 1月, 2014的文章

[MS SQL] 實作問卷調查結果交叉分析

圖片
問卷調查ER圖如下: 圖1: 簡易的問卷調查ERD 接下來根據此ERD,實作調查結果交叉分析表: 首先,請根據ERD,分別建立四個資料表(Table): Survey_Survey_Main、Survey_Subject、Survey_Answers、Survey_Result --建立資料表 Survey_Survey_Main SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Survey_Survey_Main]( [ID] [int] IDENTITY(1,1) NOT NULL, [SurveyName] [nvarchar](50) NULL, CONSTRAINT [PK_Survey_Survey_Main] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO --建立資料表 Survey_Subject SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[Survey_Subject]( [ID] [int] IDENTITY(1,1) NOT NULL, [MainID] [int] NOT NULL, [Subject] [nvarchar](50) NULL, CONSTRAINT [PK_Survey_Subject] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO --建

[MS SQL] 使用PIVOT 做兩個欄位的交叉分析(動態欄位)

圖片
上一篇 : [MS SQL] 使用PIVOT 做兩個欄位的交叉分析(固定欄位)  說明了如何將固定欄位轉成交叉分析表, 此篇進一步說明如何讓動態欄位轉成交叉分析表。 1. 產生範例資料表,這次我增加了一個交通工具選項(竹蜻蜓),目的是要說明交通工具欄位可以是動態的。 這邊我建立一個 資料表值函數 (Function),回傳範例資料表。 SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE FUNCTION uf_Table1() RETURNS @Table1 TABLE ( WhereToGo nvarchar(10), --要去哪? HowToGo nvarchar(10), --怎麼去? TotCnt int --多少人選此方法 ) AS BEGIN INSERT INTO @Table1 SELECT '台北','開車',2 UNION SELECT '台北','坐高鐵',9 UNION SELECT '台北','竹蜻蜓',200 UNION SELECT '高雄','開車',5 UNION SELECT '高雄','坐高鐵',10 UNION SELECT '高雄','竹蜻蜓',234 RETURN; END GO SELECT * FROM dbo.uf_Table1(); 2. 在使用PIVOT產生交叉分析表之前,我們要先產生一個動態的欄位字串。 --產生一個動態的欄位字串。 DECLARE @columnNames nvarchar(MAX); SELECT @columnNames = COALESCE(@columnNames + ',', '') + QUOTENAME(HowToGo) FROM dbo.uf_Table1() GROUP BY HowToGo SELECT @columnNames; 3. 使用PIVOT產生 動態欄位 的交叉分析表: DECLARE @SQL

[MS SQL] 使用PIVOT 做兩個欄位的交叉分析(固定欄位)

圖片
1. 先準備一個範例表: DECLARE @Table1 TABLE( WhereToGo nvarchar(10), --要去哪? HowToGo nvarchar(10), --怎麼去? TotCnt int --多少人選此方法 ) INSERT INTO @Table1 SELECT '台北','開車',2 UNION SELECT '台北','坐高鐵',9 UNION SELECT '高雄','開車',5 UNION SELECT '高雄','坐高鐵',10; SELECT * FROM @Table1; 2. 將此表轉成交叉分析表: --PIVOT SELECT WhereToGo AS '要去哪?' , [開車],[坐高鐵] FROM @Table1 PIVOT( SUM(TotCnt) FOR HowToGo IN ([開車],[坐高鐵]) ) AS pvt ORDER BY pvt.WhereToGo

[MS SQL] 兩個資料表的所有交叉組合

假設我有兩個表 TableA 想去哪裡? ------------- 台 北 高 雄 TableB 怎麼去? -------------- 開 車 搭高鐵 搭火車