美文网首页
SQL SERVER一条语句查询公用属性的数据简单处理

SQL SERVER一条语句查询公用属性的数据简单处理

作者: Picasso0710 | 来源:发表于2015-09-07 14:03 被阅读0次

    有那么一个小的需求,我现在有一张产品表,那么业务部门需要让我们进行一个统计:
    他告诉了我们“我们需要一张拥有我指定的同样配置的产品列表!”
    话音刚落,苦逼的我们程序员就要开始执行任务啦!
    其实业务场景很简单,写这个小文章只是为了让有同样需求的同学们少走弯路,特此记录了下来。
    表结构:(我利用临时表)

    IF EXISTS (SELECT 1 FROM tempdb..sysobjects WHERE name LIKE '%#ProductPropertyInfo%' and TYPE='U')
    DROP TABLE #ProductInfo

    IF EXISTS (SELECT 1 FROM tempdb..sysobjects WHERE name LIKE '%#ProductPropertyInfo%' and TYPE='U')
    DROP TABLE #ProductPropertyInfo

    CREATE TABLE #ProductInfo(
    [产品ID] [int] NULL,
    [产品名称] nvarchar(50) NULL,
    [产品型号] nvarchar(50) NULL
    )

    CREATE TABLE #ProductPropertyInfo(
    [产品ID] [int] NULL,
    [属性配置] nvarchar(50) NULL
    )

    插入临时数据
    INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(1,'长城汽车','C50');
    INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(2,'长城汽车','C30');
    INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(3,'长城汽车','H5');
    INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(4,'长城汽车','H6');

    INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(5,'奥迪汽车','A4');
    INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(6,'奥迪汽车','A6');
    INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(7,'奥迪汽车','A8');
    INSERT INTO #ProductInfo([产品ID],[产品名称],[产品型号])VALUES(8,'奥迪汽车','A3');

    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(1,'天窗');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(1,'电加热座椅');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(1,'涡轮增压');

    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(2,'天窗');

    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(3,'涡轮增压');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(3,'电加热座椅');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(3,'天窗');

    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(4,'涡轮增压');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(4,'精英轮毂');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(4,'电加热座椅');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(4,'天窗');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(4,'GPS');

    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(8,'天窗');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(8,'涡轮增压');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(8,'电加热座椅');

    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(5,'自动泊车');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(5,'电加热座椅');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(5,'天窗');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(5,'涡轮增压');

    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'自动泊车');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'电加热座椅');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'天窗');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'涡轮增压');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'精英轮毂');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(6,'GPS');

    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'自动泊车');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'电加热座椅');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'天窗');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'涡轮增压');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'精英轮毂');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'防弹玻璃');
    INSERT INTO #ProductPropertyInfo([产品ID],[属性配置])VALUES(7,'GPS');

    查看数据效果:

    QQ图片20150907132019.png

    从模拟数据上可以直观的看到我们所要查询的数据,我们要根据配置来选车,根据我们想要的功能来查看有那款车子符合我的需求:
    语句:(假设我目前需要拥有:“精英轮毂”和“GPS”功能特性的车子)

    SELECT * FROM #ProductInfo p INNER JOIN (
    SELECT
    [产品ID]
    FROM #ProductPropertyInfo WHERE [属性配置] IN ('精英轮毂','GPS')
    GROUP BY [产品ID] HAVING(COUNT(DISTINCT [属性配置]) > 1)) y ON p.[产品ID] = y.[产品ID]

    查询特性的语句完全取决于:[属性配置] IN ('精英轮毂','GPS') 想要什么配置就有什么配置啦!
    本文章只作为基础SQL语句的功能实现部分,如果有更好的方式也可以一起交流。

    相关文章

      网友评论

          本文标题:SQL SERVER一条语句查询公用属性的数据简单处理

          本文链接:https://www.haomeiwen.com/subject/yqdycttx.html