前言:
目的:
如果有兩大類模組是多對多的組合,如本次Smaple Code. Nick和Addidas 包包都有紅、藍、黃….或其他顏色
就可能呈現下面6種組合
- Nick(紅)
- Nick(藍)
- Nick(黃)
- Addidas(紅)
- Addidas(藍)
- Addidas(黃)
如果此建立類別的話 可能情況如下面的UNL圖
這樣會有兩個問題
- 隨著品牌和顏色增多,包包類別數量急速增長 (X = m*n)個
- 顏色我們可看做一個抽象 不應當和包包合在一起
Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker
請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面
之前有和大家分享使用CASE WHEN 搭配聚合函數實現樞紐分析
但今天如果我們要轉換成行的列希望是動態依照目前資料庫的欄位要處理呢?
我們可以使用Dynamic pivot
``Dynamic pivot 核心概念其實是把我們要使用的
pivot SQL`語法動態產生出來
CREATE TABLE T(
userName VARCHAR(100),
Price int,
Dt DATE
);
INSERT INTO T VALUES ('Tom',100,'2017-01-01');
INSERT INTO T VALUES ('Amy',200,'2017-01-02');
INSERT INTO T VALUES ('Tom',1311,'2017-01-03');
INSERT INTO T VALUES ('Tom',122,'2017-03-01');
INSERT INTO T VALUES ('Tom',111,'2017-04-01');
INSERT INTO T VALUES ('Amy',232,'2017-05-01');
INSERT INTO T VALUES ('Tom',2312,'2017-05-02');
INSERT INTO T VALUES ('Tom',23,'2017-05-03');
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @SQL = STUFF((SELECT distinct ',SUM(CASE WHEN Dt = '''+ CAST(Dt AS VARCHAR(10)) +''' THEN Price ELSE 0 END) AS ' + QUOTENAME(Dt)
FROM T
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
,1,1,'');
SET @query = 'SELECT userName,'+@cols+' FROM T GROUP BY userName' ;
EXECUTE sp_executesql @query
因為範例我們使用 SQL SERVER
所以使用 FOR XML PATH 語法將我們** CASE WHEN pivot SQL **語法產生並把他附值給 @cols
變數
SET @cols = STUFF((SELECT distinct ',SUM(CASE WHEN Dt = '''+ CAST(Dt AS VARCHAR(10)) +''' THEN Price ELSE 0 END) AS ' + QUOTENAME(Dt)
FROM T
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
,1,1,'')
某些專案因為歷史久遠沒有Source Code,但有個需求需要異動裡面的程式該怎麼辦??
難道只能整個反組譯,查看程式碼翻一份做新的嗎?
不~~其實有辦法直接對於DLL進行修改
只需使用 ** Reflexil 搭配 ILSpy 或其他支援的反組譯軟體 **
Reflexil 是一個組譯編輯器插件目前支援 Reflector, ILSpy 和 Telerik’s JustDecompile.
下載連結
Reflexil **Release 2.2 搭配 ILSpy version 3.2
之前有介紹 (SQL Server) CTE RECURSIVE (遞迴)製作月曆 在Oracle
有提供一個精簡的語法產生階層資料 CONNECT BY
CONNECT BY 有幾個常用Key Word.
LEVEL
目前在樹節點第幾階層START WITH
設定哪筆做為起始點開始樹PRIOR
用於指定父資料欄位製造出的階層樹,概念如下
[圖來自Oracle]
<code class="language-sql">SELECT X + LEVEL
FROM (
SELECT 0 X
FROM DUAL
)
CONNECT BY LEVEL <= 10
此範例使用 LEVEL
在 CONNECT BY
上當條件 建立列值到LEVEL
大於等於 10
本篇利用RabbitMQ client來簡單實現MQ功能.
在RabbitMQ中有很重要兩個角色,Producer
和Consumer
,下面這個範例使用c# console
來實現.
我個人覺得APMQ協議和Http協議有點類似,一樣有Header(Properties),body…等等概念.
一開始我們宣告一個 ConnectionFactory 並設置RabbitMQ Server連接參數
RabbitMQ預設密碼是 guest
//建立連接工廠
ConnectionFactory factory = new ConnectionFactory
{
UserName = "guest",
Password = "guest",
HostName = "localhost"
};
呼叫factory.CreateConnection
建立連接RabbitMQ連接物件,並呼叫 CreateModel
方法建立一個channel
Model
Autofac 是個IOC容器 不懂IOC 參考 我之前寫
的IOC(控制反轉),DI(依賴注入) 深入淺出~~
小弟之前有一個開源框架【C#】 AOP輕型框架 AwesomeProxy.Net 介紹使用 裡面簡單介紹 AOP核心概念和如何實作!
Autofac 有寫一個 Autofac.Extras.DynamicProxy 把AOP和IOC容器融合的框架
在Autofac使用AOP 需要實現下面幾個步驟
本次範例我們從資料庫中撈取時間資料出來,並使用Thread.Sleep(5000)
作出延遲,判斷時間是否前後一致。
我們撰寫一個快取的攔截器繼承IInterceptor
介面,並實現Intercep
方法
其中 IInvocation
參數有許多有用的資料
這幾個欄位是我們比較常用的資訊
雖然容器眾多但要解決的問題和概念是一樣
今天使用Autofac 介紹一下IoC容器
不了解 IoC 概念可參考 我之前寫 IOC(控制反轉),DI(依賴注入) 深入淺出~~
眼尖的讀者會發現我把Ioc跟容器這兩個字使用兩個不同顏色
原因是Autofac這個框架其實做到兩個概念.
之前有和大家分享使用CASE WHEN 搭配聚合函數實現樞紐分析
但今天如果我們要轉換成行的列希望是動態依照目前資料庫的欄位要處理呢?
我們可以使用Dynamic pivot
``Dynamic pivot 核心概念其實是把我們要使用的
pivot SQL`語法動態產生出來
CREATE TABLE T(
userName VARCHAR(100),
Price int,
Dt DATE
);
INSERT INTO T VALUES ('Tom',100,'2017-01-01');
INSERT INTO T VALUES ('Amy',200,'2017-01-02');
INSERT INTO T VALUES ('Tom',1311,'2017-01-03');
INSERT INTO T VALUES ('Tom',122,'2017-03-01');
INSERT INTO T VALUES ('Tom',111,'2017-04-01');
INSERT INTO T VALUES ('Amy',232,'2017-05-01');
INSERT INTO T VALUES ('Tom',2312,'2017-05-02');
INSERT INTO T VALUES ('Tom',23,'2017-05-03');
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
SET @SQL = STUFF((SELECT distinct ',SUM(CASE WHEN Dt = '''+ CAST(Dt AS VARCHAR(10)) +''' THEN Price ELSE 0 END) AS ' + QUOTENAME(Dt)
FROM T
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
,1,1,'');
SET @query = 'SELECT userName,'+@cols+' FROM T GROUP BY userName' ;
EXECUTE sp_executesql @query
因為範例我們使用 SQL SERVER
所以使用 FOR XML PATH 語法將我們** CASE WHEN pivot SQL **語法產生並把他附值給 @cols
變數
SET @cols = STUFF((SELECT distinct ',SUM(CASE WHEN Dt = '''+ CAST(Dt AS VARCHAR(10)) +''' THEN Price ELSE 0 END) AS ' + QUOTENAME(Dt)
FROM T
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)')
,1,1,'')