【问题标题】:Sql query to partiotion a datasql查询对数据进行分区
【发布时间】:2016-09-27 22:06:00
【问题描述】:

我需要根据给定的约束(列的内容)将 SQL 表分成 4 个相等的部分并创建适当的 4 个表。数据如下所示:

Field1 | Field2 | Field3
------------------------
d11       d12       d13
d21       d22       d23
d31       d32       d43
d41       d42       d43
d51       d52       d13
d61       d62       d63
d71       d72       d23
d81       d82       d43

约束是Field3。分区后我应该得到 4 张桌子

  **Table1**


  Field1 | Field2 | Field3
    ------------------------
    d11       d12       d13
    d51       d52       d13

**Table2**

Field1 | Field2 | Field3
------------------------
d21       d22       d23
d71       d72       d23


    **Table3**

    Field1 | Field2 | Field3
    ------------------------
    d31       d32       d43
    d41       d42       d43
    d81       d82       d43

**Table4**

Field1 | Field2 | Field3
    ------------------------
    d61       d62       d63

我该怎么做?我考虑过使用group by,然后逐行遍历表格。是不是很好/或者有更好的解决方案

【问题讨论】:

  • 你能解释一下你用来分隔表之间行的逻辑吗?

标签: sql tsql sorting


【解决方案1】:
DECLARE @total INT;
DECLARE @iterator INT;

SELECT @total = COUNT(0)
FROM MyTable
GROUP BY field3;

SET @iterator = 1;

WHILE @iterator <= @total
BEGIN
  SELECT s.field1,s.field2,s.field3
  FROM(
    SELECT field1,field2,field3,DENSE_RANK() OVER(ORDER BY t.Field3) as rank
    FROM MyTable) temp
  WHERE s.rank = @iterator);
  SET @iterator = @iterator + 1;
END

这应该会给你整个结果集。

【讨论】:

    【解决方案2】:
    CREATE TABLE Table1 AS (
    SELECT field1, field2, field3
    FROM table 
    where 
    WHERE field3 = 'd13') 
    
    CREATE TABLE Table2 AS (
    SELECT field1, field2, field3
    FROM table 
    where 
    WHERE field3 = 'd23') 
    

    ....

    【讨论】:

    • 这样每次他都要手动搜索所有分区。
    • @sagi 这是 4 个表,从表中选择不同的 Field3 有多难
    • 也就是说,如果它总是4个分区,不管第一句话。它永远不可能像这样动态。
    • 所以,问题是对表进行分区。你的答案是固定数量的桌子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 2013-10-27
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 2022-01-13
    相关资源
    最近更新 更多