zoukankan      html  css  js  c++  java
  • sqlserver 字符串拼接及拆开联表查询的问题

    一、sql根据一个以逗号隔开的人员guid类型的ID字符串查出其对应的姓名同样拼接成逗号隔开的字符串:

    1、需求:管理员发送通知(通知分为普通通知,奖品订单,调查问卷三种类型)给用户,并且可以查看统计哪些人员查看了,哪些还没有查看。

    2、数据库表设计:通知表,人员表,奖品订单表,调查问卷的3个表,用户通知表

    3、sql语句查讯已发通知信息:

    select a.*,e.NoRead,e.AlRead,ToUserName= STUFF(( SELECT ',' + Name
                             FROM   Users d
                             where   PATINDEX('%,' + RTRIM(Account) + ',%',',' + a.ToUserID + ',')>0
                             ORDER BY PATINDEX('%,' + RTRIM(Account) + ',%',',' + a.ToUserID + ',')        --加上排序不变(如:2,1,3)
                           FOR XML PATH('')), 1, 1,''),
    case a.NoticeTypeID when 2 then '调查问卷' when 3 then '奖品订单' else '普通通知' end as NoticeTypeName,b.AwardOrderTitle,
    b.AwardOrderDescription,c.QuestionnaireTitle
    from Notices a left join AwardOrders b on a.AwardOrderID=b.ID and b.status=1 left join QuestionnairesInfor c on a.QuestionnaireID=c.ID and c.status=1 left join (select NoticeID, COUNT(1)as sumcount,NoRead=sum(case [status] when 1 then 1 else 0 end),
    AlRead= sum(case [status] when 2 then 1 else 0 end)
    from UserNotices group by NoticeID) e on a.NoticesID=e.NoticeID where a.status=1

    二、根据字段ToUserID中存储的以逗号隔开的用户Guid类型的ID字符串,将通知发送到用户通知表:

    1、需求:将通知分发给各个用户(根据用户分条保存到用户表)

    2、数据库设计同一

    3、sql发送通知:

    insert into UserNotices(ID,NoticeID,Noticetype,AwardsOrderID,QuestionnaireID,CreatManAccount,CreatManName,CreatDate,[status]) 
    ( select NEWID(),NoticesID,NoticeTypeID,AwardOrderID,QuestionnaireID,b.Account,b.Name,GETDATE(),1 
    from Notices a left join Users b on PATINDEX('%,' + RTRIM(Account) + ',%',',' + a.ToUserID + ',')>0
    where a.NoticesID=@NoticeID ) --@NoticeID为参数通知ID
  • 相关阅读:
    [转]为什么阿里巴巴要禁用Executors创建线程池?
    支付宝的架构到底有多牛逼!
    [转] Java Agent使用详解
    Spring Boot必备技能之Starter自定义
    面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
    Docker 容器化应用
    Python Click 学习笔记
    MySQL优化(7):其他注意事项
    MySQL优化(6):分表和读写分离
    MySQL优化(5):分区
  • 原文地址:https://www.cnblogs.com/xiaoerlang90/p/5344423.html
Copyright © 2011-2022 走看看