Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查找特定值并进行批处理_Sql_Sql Server - Fatal编程技术网

Sql 查找特定值并进行批处理

Sql 查找特定值并进行批处理,sql,sql-server,Sql,Sql Server,如何找到组值 示例我有以下SKU: SkuId Description VN0A46ZERWV113000M CLASSIC VN0A46ZERWV112000M CLASSIC VN0A46ZERWV111500M CLASSIC VN0A3WCVAZ31XXL Modern VN0A3WCVAZ310XL Modern VN0A3WCVAZ3100S Modern VN0A3W

如何找到组值

示例我有以下SKU:

SkuId                   Description

VN0A46ZERWV113000M      CLASSIC
VN0A46ZERWV112000M      CLASSIC
VN0A46ZERWV111500M      CLASSIC
VN0A3WCVAZ31XXL         Modern
VN0A3WCVAZ310XL         Modern
VN0A3WCVAZ3100S         Modern
VN0A3WCVAZ3100M         Modern
VN0A3TE3RCO113000M      Not Classic
VN0A3TE3RCO112000M      Not Classic
VN0A3TE3RCO111500M      Not Classic
如何描述…:)所以,我需要找到所有具有相同描述的Sku,在Sku中找到相同的部分,并在每个组后添加新行。一般来说,同一部分是前12个字符

结果示例:

SkuId                   Description

VN0A46ZERWV113000M      CLASSIC
VN0A46ZERWV112000M      CLASSIC
VN0A46ZERWV111500M      CLASSIC
VN0A46ZERWV1            NEW
VN0A3WCVAZ31XXL         Modern
VN0A3WCVAZ310XL         Modern
VN0A3WCVAZ3100S         Modern
VN0A3WCVAZ3100M         Modern
VN0A3WCVAZ31            NEW
VN0A3TE3RCO113000M      Not Classic
VN0A3TE3RCO112000M      Not Classic
VN0A3TE3RCO111500M      Not Classic
VN0A3TE3RCO1            NEW

如果我理解正确,您可以尝试使用
UNION ALL
和函数来实现它

使用
substring
从子查询中的
SkuId
列中获取前12个字符,然后使用
distinct
删除重复的前12个字符
SkuId
然后使用
UNION ALL
两个结果集

CREATE TABLE T(
  SkuId VARCHAR(100),
  Description VARCHAR(100)
);

INSERT INTO T VALUES ('VN0A46ZERWV113000M' ,'CLASSIC');
INSERT INTO T VALUES ('VN0A46ZERWV112000M' ,'CLASSIC');
INSERT INTO T VALUES ('VN0A46ZERWV111500M' ,'CLASSIC');
INSERT INTO T VALUES ('VN0A3WCVAZ31XXL' ,'Modern');
INSERT INTO T VALUES ('VN0A3WCVAZ310XL' ,'Modern');
INSERT INTO T VALUES ('VN0A3WCVAZ3100S' ,'Modern');
INSERT INTO T VALUES ('VN0A3WCVAZ3100M' ,'Modern');
INSERT INTO T VALUES ('VN0A3TE3RCO113000M' ,'Not Classic');
INSERT INTO T VALUES ('VN0A3TE3RCO112000M' ,'Not Classic');
INSERT INTO T VALUES ('VN0A3TE3RCO111500M' ,'Not Classic');
查询1

SELECT * FROM (
  select SkuId,Description
  from T
  UNION ALL 
  SELECT distinct substring(SkuId,1,12) ,'New'  
  FROM T
) t1
order by SkuId desc
|              SkuId | Description |
|--------------------|-------------|
| VN0A46ZERWV113000M |     CLASSIC |
| VN0A46ZERWV112000M |     CLASSIC |
| VN0A46ZERWV111500M |     CLASSIC |
|       VN0A46ZERWV1 |         New |
|    VN0A3WCVAZ31XXL |      Modern |
|    VN0A3WCVAZ310XL |      Modern |
|    VN0A3WCVAZ3100S |      Modern |
|    VN0A3WCVAZ3100M |      Modern |
|       VN0A3WCVAZ31 |         New |
| VN0A3TE3RCO113000M | Not Classic |
| VN0A3TE3RCO112000M | Not Classic |
| VN0A3TE3RCO111500M | Not Classic |
|       VN0A3TE3RCO1 |         New |

SELECT * FROM (
  select SkuId,Description
  from T
  UNION ALL 
  SELECT distinct substring(SkuId,1,12) ,'New'  
  FROM T
) t1
order by SkuId desc
|              SkuId | Description |
|--------------------|-------------|
| VN0A46ZERWV113000M |     CLASSIC |
| VN0A46ZERWV112000M |     CLASSIC |
| VN0A46ZERWV111500M |     CLASSIC |
|       VN0A46ZERWV1 |         New |
|    VN0A3WCVAZ31XXL |      Modern |
|    VN0A3WCVAZ310XL |      Modern |
|    VN0A3WCVAZ3100S |      Modern |
|    VN0A3WCVAZ3100M |      Modern |
|       VN0A3WCVAZ31 |         New |
| VN0A3TE3RCO113000M | Not Classic |
| VN0A3TE3RCO112000M | Not Classic |
| VN0A3TE3RCO111500M | Not Classic |
|       VN0A3TE3RCO1 |         New |

如果我理解正确,您可以尝试使用
UNION ALL
和函数来实现它

使用
substring
从子查询中的
SkuId
列中获取前12个字符,然后使用
distinct
删除重复的前12个字符
SkuId
然后使用
UNION ALL
两个结果集

CREATE TABLE T(
  SkuId VARCHAR(100),
  Description VARCHAR(100)
);

INSERT INTO T VALUES ('VN0A46ZERWV113000M' ,'CLASSIC');
INSERT INTO T VALUES ('VN0A46ZERWV112000M' ,'CLASSIC');
INSERT INTO T VALUES ('VN0A46ZERWV111500M' ,'CLASSIC');
INSERT INTO T VALUES ('VN0A3WCVAZ31XXL' ,'Modern');
INSERT INTO T VALUES ('VN0A3WCVAZ310XL' ,'Modern');
INSERT INTO T VALUES ('VN0A3WCVAZ3100S' ,'Modern');
INSERT INTO T VALUES ('VN0A3WCVAZ3100M' ,'Modern');
INSERT INTO T VALUES ('VN0A3TE3RCO113000M' ,'Not Classic');
INSERT INTO T VALUES ('VN0A3TE3RCO112000M' ,'Not Classic');
INSERT INTO T VALUES ('VN0A3TE3RCO111500M' ,'Not Classic');
查询1

SELECT * FROM (
  select SkuId,Description
  from T
  UNION ALL 
  SELECT distinct substring(SkuId,1,12) ,'New'  
  FROM T
) t1
order by SkuId desc
|              SkuId | Description |
|--------------------|-------------|
| VN0A46ZERWV113000M |     CLASSIC |
| VN0A46ZERWV112000M |     CLASSIC |
| VN0A46ZERWV111500M |     CLASSIC |
|       VN0A46ZERWV1 |         New |
|    VN0A3WCVAZ31XXL |      Modern |
|    VN0A3WCVAZ310XL |      Modern |
|    VN0A3WCVAZ3100S |      Modern |
|    VN0A3WCVAZ3100M |      Modern |
|       VN0A3WCVAZ31 |         New |
| VN0A3TE3RCO113000M | Not Classic |
| VN0A3TE3RCO112000M | Not Classic |
| VN0A3TE3RCO111500M | Not Classic |
|       VN0A3TE3RCO1 |         New |

SELECT * FROM (
  select SkuId,Description
  from T
  UNION ALL 
  SELECT distinct substring(SkuId,1,12) ,'New'  
  FROM T
) t1
order by SkuId desc
|              SkuId | Description |
|--------------------|-------------|
| VN0A46ZERWV113000M |     CLASSIC |
| VN0A46ZERWV112000M |     CLASSIC |
| VN0A46ZERWV111500M |     CLASSIC |
|       VN0A46ZERWV1 |         New |
|    VN0A3WCVAZ31XXL |      Modern |
|    VN0A3WCVAZ310XL |      Modern |
|    VN0A3WCVAZ3100S |      Modern |
|    VN0A3WCVAZ3100M |      Modern |
|       VN0A3WCVAZ31 |         New |
| VN0A3TE3RCO113000M | Not Classic |
| VN0A3TE3RCO112000M | Not Classic |
| VN0A3TE3RCO111500M | Not Classic |
|       VN0A3TE3RCO1 |         New |

我认为您需要的其他行是:

select skuid, 'NEW'
from (select distinct left(skuid, 12) as skuid, description
      from skus
     ) t;
对于您的数据和您的问题,这可能会:

select distinct left(skuid, 12) as skuid, 'New'
from skus;
如果您特别希望排除具有不同描述的“名称”:

select left(skuid, 12) as skuid, 'New'
from skus
group by left(skuid, 12)
having min(description) = max(description);
您可以使用
insert
将它们添加到表中:

insert into skus (skuid, description)
    select distinct left(skuid, 12) as skuid, 'New'
    from skus;
如果您只需要一个结果集,则使用
union
和正确的
order by

select skuid, description
from ((select skuid, description, 1 as priority
       from skus
      ) union all
      (select distinct left(skuid, 12) as skuid, 'New', 2
       from skus
      )
     ) sd
order by skuid, priority;

我认为您需要的其他行是:

select skuid, 'NEW'
from (select distinct left(skuid, 12) as skuid, description
      from skus
     ) t;
对于您的数据和您的问题,这可能会:

select distinct left(skuid, 12) as skuid, 'New'
from skus;
如果您特别希望排除具有不同描述的“名称”:

select left(skuid, 12) as skuid, 'New'
from skus
group by left(skuid, 12)
having min(description) = max(description);
您可以使用
insert
将它们添加到表中:

insert into skus (skuid, description)
    select distinct left(skuid, 12) as skuid, 'New'
    from skus;
如果您只需要一个结果集,则使用
union
和正确的
order by

select skuid, description
from ((select skuid, description, 1 as priority
       from skus
      ) union all
      (select distinct left(skuid, 12) as skuid, 'New', 2
       from skus
      )
     ) sd
order by skuid, priority;

VN0A46ZERWV1
作为SKU出现的逻辑是什么,例如
VN0A46ZerWv11500M
?@TimBiegeleisen我们应该截断SkuId中的前12个字符,并像单独的SKU一样添加这些字符。您提到这一行时,请在“之后”加上,但这些数据中没有表示顺序的任何内容。您是要在select语句中执行此操作,还是要向表中添加数据。这个问题需要很多帮助才能弄清楚。您正在寻找函数编辑:Linked vba left而不是sqlINSERT YourTable(SkuId,Description)选择DISTINCT left(SkuId,12),表格中的“新建”
VN0A46ZERWV1
作为SKU出现的逻辑是什么,例如,
VN0A46ZerWv11500M
?@TimBiegeleisen我们应该截断SkuId中的前12个字符,并添加这些字符,就像单独的SKU一样。您在“之后”提到了关于这一行的内容,但这些数据中没有任何表示顺序的内容。您是要在select语句中执行此操作,还是要向表中添加数据。这个问题需要很多帮助才能弄清楚。您正在寻找函数编辑:Linked vba left而不是sqlINSERT YourTable(SkuId,Description)从YourTable中选择DISTINCT left(SkuId,12),“NEW”(新建)!非常感谢你@你真的应该接受答案,特别是当他们提供了一个优雅的解决方案。太好了!非常感谢你@KirillRodeonov你真的应该接受答案,特别是当他们提供了一个优雅的解决方案。