1. 程式人生 > >【sql】根據兩個欄位的值組合情況去自定義第三個欄位

【sql】根據兩個欄位的值組合情況去自定義第三個欄位

場景2:

根據兩個欄位的值組合情況去自定義第三個欄位

原始表:

S_INFO_WINDCODE S_INFO_LISTBOARDNAME
600129.SH 主機板
000606.SZ 主機板
002152.SZ 中小企業板
300458.SZ 創業板

目標:根據欄位S_INFO_WINDCODE中的值的SH和SZ,與S_INFO_LISTBOARDNAME中的值組合構成一個第三個欄位MARKET_LISTBOARDNAME,也即如下表

S_INFO_WINDCODE S_INFO_LISTBOARDNAME MARKET MARKET_LISTBOARDNAME
600129.SH 主機板 SH 滬市A股
000606.SZ 主機板 SZ 深A主機板
002152.SZ 中小企業板 SZ 中小板
300458.SZ 創業板 SZ 創業板

    解決思路:

-- 建立列名MARKET
SET @dbname = DATABASE();
SET @tablename = "asharedescription";
SET @columnname = "MARKET";
SET @preparedStatement = (SELECT IF(
  (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      (table_name = @tablename)
      AND (table_schema = @dbname)
      AND (column_name = @columnname)
  ) > 0,
  "SELECT 1",
  CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " VARCHAR(10) NOT NULL default 'NO';")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;

-- 建立列名MARKET_LISTBOARDNAME
SET @dbname = DATABASE();
SET @tablename = "asharedescription";
SET @columnname = "MARKET_LISTBOARDNAME";
SET @preparedStatement = (SELECT IF(
  (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS
    WHERE
      (table_name = @tablename)
      AND (table_schema = @dbname)
      AND (column_name = @columnname)
  ) > 0,
  "SELECT 1",
  CONCAT("ALTER TABLE ", @tablename, " ADD ", @columnname, " VARCHAR(10) NOT NULL default 'NO';")
));
PREPARE alterIfNotExists FROM @preparedStatement;
EXECUTE alterIfNotExists;
DEALLOCATE PREPARE alterIfNotExists;

-- 生成組合的資料
SELECT a.s_info_windcode,
substring_index(a.S_INFO_WINDCODE, '.', -1) MARKET,
a.S_INFO_LISTBOARDNAME,
CASE 
  WHEN substring_index(a.S_INFO_WINDCODE, '.', -1)='SH' AND S_INFO_LISTBOARDNAME='主機板' THEN '滬市A股'
  WHEN substring_index(a.S_INFO_WINDCODE, '.', -1)='SZ' AND S_INFO_LISTBOARDNAME='主機板' THEN '深A主機板'
  WHEN S_INFO_LISTBOARDNAME='中小企業板' THEN '中小板'
  WHEN S_INFO_LISTBOARDNAME='創業板' THEN '創業板'
  ELSE NULL END MARKET_LISTBOARDNAME
FROM asharedescription a;

-- 更新資料
UPDATE asharedescription ad,
(
-- start 生成組合的資料  
SELECT a.s_info_windcode,
substring_index(a.S_INFO_WINDCODE, '.', -1) MARKET,
a.S_INFO_LISTBOARDNAME,
CASE 
  WHEN substring_index(a.S_INFO_WINDCODE, '.', -1)='SH' AND S_INFO_LISTBOARDNAME='主機板' THEN '滬市A股'
  WHEN substring_index(a.S_INFO_WINDCODE, '.', -1)='SZ' AND S_INFO_LISTBOARDNAME='主機板' THEN '深A主機板'
  WHEN S_INFO_LISTBOARDNAME='中小企業板' THEN '中小板'
  WHEN S_INFO_LISTBOARDNAME='創業板' THEN '創業板'
  ELSE NULL END MARKET_LISTBOARDNAME
FROM asharedescription a
-- end 生成組合的資料  
) AS tt
SET ad.MARKET = tt.MARKET,ad.MARKET_LISTBOARDNAME = tt.MARKET_LISTBOARDNAME
WHERE tt.S_INFO_WINDCODE = ad.S_INFO_WINDCODE; 

相關推薦

sql根據組合情況定義

場景2: 根據兩個欄位的值組合情況去自定義第三個欄位 原始表: S_INFO_WINDCODE S_INFO_LISTBOARDNAME 600129.SH 主機板 000606.SZ 主機板 002152.SZ 中小企業板 30

Java實現一個演算法,找出一個單鏈表中倒數K結點

用迭代法,使用兩個指標P1和P2,分別指向連結串列中相聚K個結點的兩個結點。 P1,p2均指向頭加點,然後將P2向前移動K個結點。之後,以相同的速度移動這兩個指標,那麼p2會在length-K步後到達尾結點,這時p1就剛好在第length-K個結點也就是倒數第K個結點的位置

QTQT從零入門教程(十一):QT定義視窗

  首先是借鑑了網上的部落格,實現無邊框,自由拖動的自定義視窗效果。 #ifndef CUSTOMWINDOW_H #define CUSTOMWINDOW_H #include <QtGui> #include <QtWidg

QTQtcreator的設計模式中將控制元件提升為定義的控制元件

測試環境 在工程中新增自定義的控制元件 如:MyWidget 進入設計模式,右鍵需要提升的控制元件(該控制元件的父類必須和自定義控制元件的父類相同,否則不能提升),選擇“提升為…”

使用idea的時候遇到的n問題:第一是關於註冊過期,怎麼才可以永久使用,第二是關於maven繫結到idea,。。。。n。。

關於idea的n個問題,我也是網上到處找,然後發現下邊部落格幫我解決了相關問題: 問題一:一個是關於註冊過期,怎麼才可以永久使用 https://blog.csdn.net/f317363184/article/details/78808925?utm_source=blogxgwz4

SQL帶order by查詢進行union all報ORA-00933錯誤的解決方法

在oracle SQL中,要求order by是select語句的最後一個語句,而且一個select語句中只允許出現一個order by語句,而且order by必須位於整個select語句的最後。 當時是要將一個十分複雜的檢索明細查詢和一個十分複雜的檢索彙總查詢的結果

TP5根據資料庫註釋使用同一模板進行增刪查

author:咔咔 wechat:fangkangfk   有沒有在新增跟修改的時候很煩,需要寫很多頁面,修改還需要追加資料,很煩,很煩   下來就解決這樣的問題,所有模組的新增,修改,檢視,都使用同一個模板 首先從資料庫設計開始 註釋解釋:

SQL一條查詢中統計同一不同記錄數量(頻數統計)的寫法

     SQL查詢中經常會碰到需要在一條語句中統計某欄位中不同記錄值的數量,即頻數統計。在看《高效能MySQL》(https://book.douban.com/subject/23008813/)這本“葵花寶典”時看到裡面總結了兩種方法,我在這裡再整理記錄一下:一種是

編程題不引入變量,而交換變量的

其中 blog b+ 沒有 來源 article else 位移 text 不引入第三個變量,而交換兩個變量的值 方法一:算術運算 1 int a,b; 2 a=10;b=12; 3 a=b-a; //a=2;b=12 4 b=b-a; //a=2;b=10

java判斷引用型別的變數是否指向同一地址

  問題:有兩個物件obj1和obj2,都是MyObject類的例項。如何比較這兩個物件是否指向相同的記憶體地址? 分情況討論: 1、如果 MyObject類的equals方法和hashcode方法被重寫:  如果obj1 == obj2 為真,則兩者指向相同的

LeetCode 350. 陣列的交集 II

1.題目 給定兩個陣列,編寫一個函式來計算它們的交集。 2.思路 此題對第一題的區別在於可以輸出相同數字 例如:輸入【1,2,2,1】,【2,2】;輸出【2,2】 step1:遍歷兩個向量; step2:把兩個陣列重複的元素加入到vector res中(可以

LeetCode 349. 陣列的交集

1.題目 給定兩個陣列,編寫一個函式來計算它們的交集。 2.思路 step1:遍歷兩個向量; step2:把重複的元素加入到set中(set不重複) step3:返回set對應的vector 注意:陣列1、2為空集的時候,直接返回空集 3.程式碼 vec

Java指定日期相隔的天數日期及月份日期

import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; pu

JS合併有序陣列 #陣列

給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。 說明: 初始化 nums1 和 nums2 的元素數量分別為 m 和 n。 你可以假設 nums1 有足夠的空間(空間大小大於或等於 m + n)來儲存 nu

Mysql表(查詢結果)的差集

求兩個查詢結果的差集,Mysql直接提供了關鍵字not in,但是not in的效率極其低下,出現例如求一個上千查詢結果在上萬查詢結果的差集,那麼使用not in來查詢的查詢速度極其緩慢,這是必須使用左連結的方式求查詢。 先從簡單的說起,比如在表blog的id情況是這樣的: 在表usert

Python交換陣列的切片,有坑

問題描述: 交換陣列a和陣列b的前5個元素,如果用C語言思路寫,會發現有坑: a=np.zeros(10) b=np.ones(10) t=a[:5] a[:5]=b[:5] b[:5]=t a array([1., 1., 1., 1., 1., 0., 0., 0., 0., 0.]

演算法合併排序的陣列

合併兩個排序的陣列 對於集合合併這類操作,其實不同的資料量,為了速度或者更小的空間有很多種做法,甚至可使用多執行緒併發處理都可以(下一節會實現該方式)。下面的例子基於單執行緒,且資料量較小的實現。

Javascript物件的交集、差集

//dataA,dataB樣例: [{ id: 1, name: 'zw' }] /** * 獲取兩個物件的差集 * @param dataA:大物件 * @param dataB:小物件 *

LeetCode004.排序陣列的中位數

兩個排列陣列的中位數 問題描述: 給定兩個大小為 m 和 n 的有序陣列 nums1 和 nums2 。 請找出這兩個有序陣列的中位數。要求演算法的時間複雜度為 O(log (m+n)) 。 你可以假