久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何將 1 行的 3 個值應用到每個值的 3 行?

How to apply 3 values for 1 row to 3 rows with each value?(如何將 1 行的 3 個值應用到每個值的 3 行?)
本文介紹了如何將 1 行的 3 個值應用到每個值的 3 行?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我有許多具有 1 到 6 個值的行.例如:

I have a number of ROWS that have 1 to 6 values. For example:

Param1: A|B|C|D
Param2: B|Y
Param3: A

我需要像這樣轉換它:

Param1: A
Param1: B
Param1: C
Param1: D
Param2: B
Param2: Y
Param3: A

好吧,我想一個 pivot-unpivot 可能會起作用,但是我需要獲得很多條件和字段.另外,我有一個視圖,可以劃分所有值并對其進行計數.在上面的例子中,它會像這樣返回數據集:

Well, I guess a pivot-unpivot might work, but there are a lot of conditions and fields I need to get. Also, I have a View that divides all values and counts them. In the top example it will return dataset like this:

A 2
B 2
C 1
D 1
Y 1

這是我自己的例子,它在幾條記錄上運行良好,但在超過 100000 行時運行得非常糟糕.

Here is my own example, which is working alright on a few records and works very badly with more than 100000 rows.

最初的故事是關于這個的.我有一些對象(obj),每個對象都有它的參數(prm),它們有它的值(val).所以,如您所見,每個對象都像一棵樹,我需要將其展開.這是一個模擬:

Initial story is about this. I have some objects(obj), each has its params(prm), which have its values (val). So, as you see, each object is like a tree, which I need to expand. Here is a simulation:

DECLARE @x TABLE
    (
      prm INT ,
      iin VARCHAR(20) ,
      oout VARCHAR(20)
    ) 
INSERT  INTO @x
VALUES  ( 1, 'A/B/C', 'A' )
INSERT  INTO @x
VALUES  ( 1, 'A/B/C', 'B' )
INSERT  INTO @x
VALUES  ( 1, 'A/B/C', 'C' )
INSERT  INTO @x
VALUES  ( 3, 'D', 'D' )
INSERT  INTO @x
VALUES  ( 2, 'R/G', 'R' )
INSERT  INTO @x
VALUES  ( 2, 'R/G', 'G' )

DECLARE @y TABLE
    (
      obj INT ,
      prm INT ,
      val VARCHAR(20)
    ) 
INSERT  INTO @y
VALUES  ( 10, 1, 'A/B/C' )
INSERT  INTO @y
VALUES  ( 10, 2, 'R/G' )
INSERT  INTO @y
VALUES  ( 10, 3, 'D' )
INSERT  INTO @y
VALUES  ( 20, 2, 'R/G' )
INSERT  INTO @y
VALUES  ( 20, 3, 'D' )

DECLARE @z TABLE
    (
      id INT ,
      obj INT ,
      prm INT ,
      val VARCHAR(20)
    ) 
INSERT  INTO @z
VALUES  ( 1, 10, 1, NULL ) 
INSERT  INTO @z
VALUES  ( 2, 10, 1, NULL ) 
INSERT  INTO @z
VALUES  ( 3, 10, 1, NULL ) 
INSERT  INTO @z
VALUES  ( 4, 10, 2, NULL ) 
INSERT  INTO @z
VALUES  ( 5, 10, 2, NULL ) 
INSERT  INTO @z
VALUES  ( 6, 10, 3, NULL ) 
INSERT  INTO @z
VALUES  ( 7, 20, 2, NULL ) 
INSERT  INTO @z
VALUES  ( 8, 20, 2, NULL ) 
INSERT  INTO @z
VALUES  ( 9, 20, 3, NULL )

和決定:

;
WITH    a AS ( SELECT   ROW_NUMBER() OVER ( PARTITION BY prm ORDER BY prm ) n ,
                    *
           FROM     @x
         ),
    b AS ( SELECT   ROW_NUMBER() OVER ( PARTITION BY obj, prm ORDER BY obj, prm ) n ,
                    *
           FROM     @z
         )
UPDATE  b
SET     b.val = a.oout
FROM    b
        INNER JOIN @y y ON y.obj = b.obj
                           AND y.prm = b.prm
        INNER JOIN a ON a.n = b.n
                        AND a.prm = b.prm
                        AND y.val = a.iin
SELECT  *
FROM    @z

@y 表 - 是一個像第一個例子一樣帶有參數的表,其中 Param1,Param2 是 prm 列上的 1,2 個 ets,關于 中的某個對象>對象
@z 表 - 模擬 val 設置為 null,表示哪些參數應該填充值
@x 表 - 是對值劃分的模擬,應該應用于 @y 表,替換 @z 的空值包含實際排名值的表格.

@y table - is a table with arguments like the first example, where Param1,Param2 is 1,2 ets on column prm, concerning some object in obj
@z table - is simulation with val set to null, which represents, what params should be filled with values
@x table - is a simulation of dividing of values, that should be applied to @y table, replacing the null values of the @z table with actual ranked values.

有沒有更好的方法來做到這一點?

Is there a better way to do this?

推薦答案

好吧,我不會給你一個完整的解決方案,但如果我需要像這樣拆分數據,我會嘗試使用 sqlxml(您必須在大量行上嘗試以檢查性能是否適合您):

Well I'll not give you a full solution, but if I need split data like this, I'd try to use sqlxml (you have to try it on large number of rows to check if performance ok for you):

declare @x table (prm int,iin varchar(20))

insert into @x values(1, 'A/B/C')
insert into @x values(3, 'D')
insert into @x values(2, 'R/G')

select
    x.prm, x.iin, T.C.value('.', 'nvarchar(max)') as oout
from @x as x
    outer apply (
        select cast('<d>' + replace(x.iin, '/', '</d><d>') + '</d>' as xml) as Data
    ) as D
    outer apply D.Data.nodes('d') as T(C)

參見 sql fiddle 演示 嘗試一下.

這篇關于如何將 1 行的 3 個值應用到每個值的 3 行?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標記轉換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創建視圖?)
Create calculated value based on calculated value inside previous row(根據前一行內的計算值創建計算值)
How do I stack the first two columns of a table into a single column, but also pair third column with the first column only?(如何將表格的前兩列堆疊成一列,但也僅將第三列與第一列配對?) - IT屋-程序員軟件開發技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 国产在线观看一区二区 | 亚洲一本| 中文字幕在线二区 | 国产美女精品 | 黑人精品欧美一区二区蜜桃 | 农村黄性色生活片 | 久久精品日产第一区二区三区 | 成人在线a | 中文字幕在线一区二区三区 | 午夜寂寞影院在线观看 | 一区二区三区 在线 | 99热播放 | 91久久久久 | 日韩久久久久久 | 日韩欧美在线一区 | 午夜影院| 亚洲一区国产精品 | 在线观看黄视频 | 犬夜叉在线观看 | 国产一区二区三区免费观看视频 | 一区二区三区视频在线观看 | av无遮挡 | 久优草| 一级aaaaaa毛片免费同男同女 | 亚洲视频在线一区 | 九九热在线观看 | 日韩电影a| 欧美在线a | 国产成人jvid在线播放 | 久久久久久免费毛片精品 | 黄色成人国产 | 免费一二区 | 国产一级一级国产 | 国产福利视频在线观看 | 欧美精品久久久久 | 99国产在线 | 中文字幕亚洲在线 | 久久久精 | 黄色在线观看国产 | 国内精品久久久久久久影视简单 | 夜夜夜久久久 |