果糖网

sqlsuger 怎么写派生表 返回

SqlSugar
38 212
该叫什么 九黎 发布于2周前
悬赏:100 飞吻

我已经把sql写好了 发现sql没有找到派生表

热忱回答38

  • https://www.donet5.com/Home/Doc?typeId=2231

    0 回复
  • 联表子查询

    0 回复
  • @小杰:我要的是派生表

    0 回复
  • SELECT a.address,三月,四月 FROM
        (
            SELECT address,COUNT(c.id)AS 三月 FROM ten_sample_ser_cremation c
            JOIN Ten_Sample_Ser_main m ON c.ServiceNo=m.ServiceNo
            WHERE c.STATUS!=0 AND DATE_FORMAT(c.startDt,"%y-%m")=DATE_FORMAT("2021-03-1","%y-%m")
            GROUP BY Address,DATE_FORMAT(c.startDt,"%y-%m")
        )AS a
    LEFT JOIN (
            SELECT COUNT(c.id) AS 四月 ,address  FROM ten_sample_ser_cremation c
            JOIN Ten_Sample_Ser_main m ON c.ServiceNo=m.ServiceNo
            WHERE c.STATUS!=0 AND DATE_FORMAT(c.startDt,"%y-%m")=DATE_FORMAT("2021-04-1","%y-%m")
            GROUP BY Address,DATE_FORMAT(c.startDt,"%y-%m")
        ) AS b
    ON a.address=b.address
    
    就像是这样 我查了第一次的数据 和第二次的数据 我需要把address 字段相同的排列在一起


    0 回复
  • @九黎:就是上面链接 标题3

    0 回复
  • @小杰:谢谢,我先试试看

    0 回复
  • @小杰:我查出来的表一和表二需要左连接

    var query1 = db.Queryable<Student, School>((st, sc) => new JoinQueryInfos(
        JoinType.Left,st.SchoolId==sc.Id
    ))
    .Where(st => st.Name == "jack");
     
    var query2 = db.Queryable<DataTestInfo>();
     
    db.Queryable(query1, query2, (p1, p2) => p1.Id == p2.Int1).Select<ViewModelStudent>().ToList();


    我没找到连接方式啊

    cremationNumVms = .(tQueryable1tQueryable2JoinType.(p1p2) => 
            p1..(p2.)).((p1p2)=>CremationNumVM{
            = SqlFunc.(p1.)= SqlFunc.(p2.)= p1.}).()

    两个查询结果集都是正确的

    另外我查询的时候出现了一个未知表   Table 'expandoobject' doesn't exist

    0 回复
  • @小杰:连接方式找到了


    0 回复
  • @小杰:查询的时候出现一个

    ExpandoObject

    表 这个问题目前还没解决

    0 回复
  • numVms = .(tQueryable2tQueryable1(p1p2) => p1..(p2.)).<CremationNumVM>().()

    这是连接查询的语句

    0 回复
  • Db.Queryable(tQueryable2, tQueryable1, (p1, p2) => p1.address.Equals(p2.address)).Select<CremationNumVM>().ToList();

    0 回复
  • @九黎:这个代码没问题吧 

    0 回复
  • @小杰:代码是没问题 就是打印的sql语句莫名其妙的多了一个

    `ExpandoObject`


    0 回复
  •  SELECT *
             FROM `ExpandoObject`
     

    0 回复
  • 如果有问题你也可以 select((p1,p2)=>new class(){xx=p1.xx}).tolist()

    手动指定

    0 回复
  • @小杰:然后系统提示该表不存在


    0 回复
  •          var cremationNumVms = Db.Queryable(tQueryable1, tQueryable2,JoinType.Left,(a1,a2)=> a1.address.Equals(a2.address))
                        .Select((a1,a2)=>   
                            new CremationNumVM{
                            TimeOneNumber = SqlFunc.AggregateCount(a1.address),
                            TimeTwoNumber = SqlFunc.AggregateCount(a2.address),
                            Address = a1.address
                        }).ToList();

    我试过了 还是这样

    @小杰

    0 回复
  • 我单独查询两个集合都是没有问题的

    0 回复
  • @小杰:如果还有问题可以升级到最新版本,或者写个控制台DEMO发我 我给你看一下

    0 回复
  • @小杰:sqlsuger版本是5.013

    0 回复
  • var tQueryable2 = Db.Queryable<Ten_Sample_Ser_Cremation, Ten_Sample_Ser_Main>
        ((c, m) =>
            new JoinQueryInfos(JoinType.Inner, m.ServiceNo.Equals(c.ServiceNo)))
        .AS(Replace<Ten_Sample_Ser_Cremation>(tenCode))
        .Where((c, m) => c.Status != 0)
        .Select((c, m) => new CremationT{
            year = c.StartDt.Value.Year,
            month = c.StartDt.Value.Month,
            address = m.Address
        })
        .MergeTable()
        .GroupBy(a => new {a.year, a.month, a.address})
        .Where(a => a.year == timeTwoYear && a.month == timeTwoMonth);
        
        var tQueryable1 = Db.Queryable<Ten_Sample_Ser_Cremation, Ten_Sample_Ser_Main>
        ((c, m) =>
            new JoinQueryInfos(JoinType.Inner, m.ServiceNo.Equals(c.ServiceNo)))
        .AS(Replace<Ten_Sample_Ser_Cremation>(tenCode))
        .Where((c, m) => c.Status != 0)
        .Select((c, m) => new CremationT {
            year = c.StartDt.Value.Year,
            month = c.StartDt.Value.Month,
            address = m.Address
        })
        .MergeTable()
        .GroupBy(a => new {a.year, a.month, a.address})
        .Where(a => a.year == timeOneYear && a.month == timeOneMonth);
        
        List<CremationNumVM> cremationNumVms = 
        Db.Queryable(tQueryable1,tQueryable2,
        (t1,t2)=>t1.address.Equals(t2.address)).Select(
        (t1,t2)=>new CremationNumVM{
            TimeOneNumber = SqlFunc.AggregateCount(t1.address),
            TimeTwoNumber = SqlFunc.AggregateCount(t2.address),
            Address = t1.address
        }).ToList();


    @小杰

    0 回复
  • @小杰:他是不是第二个参数只能是一个表? 不能是结果集

    0 回复
  • SELECT COUNT(`p1`.`address`) AS `TimeOneNumber`,
           COUNT(`p2`.`address`) AS `TimeTwoNumber`,
           `p1`.`address`        AS `Address`
    FROM (
             SELECT *
             FROM (
                      SELECT Year (`c`.`StartDt`) AS `year`, Month (`c`.`StartDt`) AS `month`, `m`.`Address` AS `address`
                      FROM `Ten_Sample_Ser_Cremation` c Inner JOIN `ten_sample_ser_main` m
                      ON (`m`.`ServiceNo` = `c`.`ServiceNo`)
                      WHERE ( `c`.`Status` <> 0))
                      MergeTable
             WHERE ((`year` = 2021) AND (`month` = 3))
             GROUP BY `year`, `month`, `address`) p1
             Left JOIN
         (
             SELECT *
             FROM `ExpandoObject`
             WHERE ((`year` = 2021) AND (`month` = 4))
             GROUP BY `year`, `month`, `address`) p2 ON (`p1`.`address` = `p2`.`address`
             )

    这是他打印的sql信息

    @小杰

    0 回复
  • @九黎:第一升级到最新,第二还有问题把你上面代码的几个类发出来

    0 回复
  • 光有代码没有类我没办法测试

    0 回复
  • [SugarTable("ten_sample_ser_cremation")]
    public class Ten_Sample_Ser_Cremation {
       public Ten_Sample_Ser_Cremation() { }
       public string Id { get; set; }
       public int ServiceNo { get; set; }
       public string ServiceId { get; set; }
       public string UrnName { get; set; }
       public string FacilityId { get; set; }
       public string FacilityName { get; set; }
       public string OperatorId { get; set; }
       public string OperatorName { get; set; }
       public int Status { get; set; }
       public DateTime? StartDt { get; set; }
       public DateTime? EndDt { get; set; }
       public DateTime? HandoverDt { get; set; }
       public string Code { get; set; }
       public DateTime? AshPrintDt { get; set; }
       public int AshPrintCount { get; set; }
       public string UpdateId { get; set; }
       public string UpdateName { get; set; }
       public DateTime? UpdateTime { get; set; }
    }
    }
    0 回复
  • 所有类都发出来

    0 回复
  • @小杰:  我就几个实体类 vm

    0 回复
  • public class CremationT {
        public CremationT() { }
    
        /// <summary>
        /// 描述 :地区
        /// </summary>
        [SwaggerSchema("地区")]
        public string address { get; set; }
    
        /// <summary>
        /// 描述 :年
        /// </summary>
        [SwaggerSchema("日期")]
        public long year { get; set; }
    
        /// <summary>
        /// 描述 :月
        /// </summary>
        [SwaggerSchema("日期")]
        public long month { get; set; }
    }


    0 回复
  • @九黎:你上面的查询不止这一个类

    0 回复
  • public class CremationNumVM {
        /// <summary>
        /// 描述 :日期一数量
        /// </summary>
        [SwaggerSchema("数量")]
        public long TimeOneNumber { get; set; }
    
        /// <summary>
        /// 描述 :日期二数量
        /// </summary>
        [SwaggerSchema("日期")]
        public long TimeTwoNumber { get; set; }
    
        /// <summary>
        /// 描述 :地区
        /// </summary>
        [SwaggerSchema("地区")]
        public string Address { get; set; }
    }
    0 回复
  • @小杰:你不写DEMO但是你也要把该有的东西发全 ,不然浪费双方时间,还有你SQLSUGAR升级到最新了没有

    0 回复
  • [SugarTable("ten_sample_ser_main")]
    public class Ten_Sample_Ser_Main
    {
          public Ten_Sample_Ser_Main()
          {
          }
    
           /// <summary>
           /// 描述 :  
           /// 空值 : False
           /// 默认 : 
           /// </summary>
           [Display(Name = "")]           
           [SugarColumn(IsPrimaryKey=true)]
           public string Id {get;set;}
    
           /// <summary>
           /// 描述 : 服务号(全局使用) 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "服务号(全局使用)")]           
           public int ServiceNo {get;set;}
    
           /// <summary>
           /// 描述 : 逝者类型 字典DeadType 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "逝者类型 字典DeadType")]           
           public string DeadType {get;set;}
    
           /// <summary>
           /// 描述 : 逝者姓名 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "逝者姓名")]           
           public string Name {get;set;}
    
           /// <summary>
           /// 描述 : 逝者身份证件类型 字典IdType 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "逝者身份证件类型 字典IdType")]           
           public string IdType {get;set;}
    
           /// <summary>
           /// 描述 : 逝者身份证件号码 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "逝者身份证件号码")]           
           public string IdNumber {get;set;}
    
           /// <summary>
           /// 描述 : 逝者性别 字典DeadSex 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "逝者性别 字典DeadSex")]           
           public string Sex {get;set;}
    
           /// <summary>
           /// 描述 : 出生日期 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "出生日期")]           
           public DateTime? BirthDate {get;set;}
    
           /// <summary>
           /// 描述 : 亡故日期 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "亡故日期")]           
           public DateTime? DeathDate {get;set;}
    
           /// <summary>
           /// 描述 : 享年 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "享年")]           
           public int? Age {get;set;}
    
           /// <summary>
           /// 描述 : 亡故原因 字典DeathReason 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "亡故原因 字典DeathReason")]           
           public string DeathReason {get;set;}
    
           /// <summary>
           /// 描述 : 减免类型 字典DiscountType 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "减免类型 字典DiscountType")]           
           public string DiscountType {get;set;}
    
           /// <summary>
           /// 描述 : 国籍 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "国籍")]           
           public string Country {get;set;}
    
           /// <summary>
           /// 描述 : 民族 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "民族")]           
           public string Nation {get;set;}
    
           /// <summary>
           /// 描述 : 逝者身份证头像 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "逝者身份证头像")]           
           public string AvatarFileId {get;set;}
    
           /// <summary>
           /// 描述 : 逝者户籍地址 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "逝者户籍地址")]           
           public string DeadAddr {get;set;}
    
           /// <summary>
           /// 描述 : 收敛地点 地址代码 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "收敛地点 地址代码")]           
           public string Address {get;set;}
    
           /// <summary>
           /// 描述 : 详细地址 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "详细地址")]           
           public string AddrDetail {get;set;}
    
           /// <summary>
           /// 描述 : 入馆方式 字典EntryMode 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "入馆方式 字典EntryMode")]           
           public string EntryMode {get;set;}
    
           /// <summary>
           /// 描述 : 死亡证明单位类型 字典Dcertificateunit 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "死亡证明单位类型 字典Dcertificateunit")]           
           public string ProveUnitType {get;set;}
    
           /// <summary>
           /// 描述 : 死亡证明单位名称 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "死亡证明单位名称")]           
           public string ProveUnitName {get;set;}
    
           /// <summary>
           /// 描述 : 死亡证明编号 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "死亡证明编号")]           
           public string ProveNo {get;set;}
    
           /// <summary>
           /// 描述 : 遗体状态 字典SkeletalState 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "遗体状态 字典SkeletalState")]           
           public string BodyStatus {get;set;}
    
           /// <summary>
           /// 描述 : 遗体状态备注 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "遗体状态备注")]           
           public string BodyMemo {get;set;}
    
           /// <summary>
           /// 描述 : 预计火化日期 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "预计火化日期")]           
           public DateTime? PlanCremationDate {get;set;}
    
           /// <summary>
           /// 描述 : 随身遗物 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "随身遗物")]           
           public string Remains {get;set;}
    
           /// <summary>
           /// 描述 : 备注 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "备注")]           
           public string Remark {get;set;}
    
           /// <summary>
           /// 描述 : 经办人姓名 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "经办人姓名")]           
           public string AgentName {get;set;}
    
           /// <summary>
           /// 描述 : 经办人电话 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "经办人电话")]           
           public string Tel {get;set;}
    
           /// <summary>
           /// 描述 : 与逝者关系  字典DeadRelation 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "与逝者关系  字典DeadRelation")]           
           public string DeadRelation {get;set;}
    
           /// <summary>
           /// 描述 : 经办人身份证件类型 字典IdType 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "经办人身份证件类型 字典IdType")]           
           public string AgentIdType {get;set;}
    
           /// <summary>
           /// 描述 : 经办人身份证件号码 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "经办人身份证件号码")]           
           public string AgentIdNumber {get;set;}
    
           /// <summary>
           /// 描述 : 经办人通信地址 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "经办人通信地址")]           
           public string AgentAddr {get;set;}
    
           /// <summary>
           /// 描述 : 状态 字典 ServiceStatus 
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "状态 字典 ServiceStatus")]           
           public string Status {get;set;}
    
           /// <summary>
           /// 描述 :  
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "")]           
           public string CreateId {get;set;}
    
           /// <summary>
           /// 描述 :  
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "")]           
           public string CreateName {get;set;}
    
           /// <summary>
           /// 描述 :  
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "")]           
           public DateTime CreateTime {get;set;}
    
           /// <summary>
           /// 描述 :  
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "")]           
           public string UpdateId {get;set;}
    
           /// <summary>
           /// 描述 :  
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "")]           
           public string UpdateName {get;set;}
    
           /// <summary>
           /// 描述 :  
           /// 空值 : True
           /// 默认 : NULL
           /// </summary>
           [Display(Name = "")]           
           public DateTime? UpdateTime {get;set;}
    
    }


    0 回复
  • @小杰:用的是5.013的

    0 回复
  • @九黎:升级到最新才行

    0 回复
  • @小杰:升级了 5.028

    public List<CremationNumVM> CremationNumVM(DateTime timeOne, DateTime timeTwo) {
        // timeOne = new DateTime(timeOne.Year, timeOne.Month, 1);
        var timeOneYear = timeOne.Year;
        var timeOneMonth = timeOne.Month;  
        var timeTwoYear = timeTwo.Year;
        var timeTwoMonth = timeTwo.Month;
        // timeTwo = new DateTime(timeOne.Year, timeOne.Month, 1);
        var tQueryable1 = Db.Queryable<Ten_Sample_Ser_Cremation, Ten_Sample_Ser_Main>
            ((c, m) =>
                new JoinQueryInfos(JoinType.Inner, m.ServiceNo.Equals(c.ServiceNo)))
       
            .Where((c, m) => c.Status != 0)
            .Select((c, m) => new CremationT {
                year = c.StartDt.Value.Year,
                month = c.StartDt.Value.Month,
                address = m.Address
            })
            .MergeTable()
            .GroupBy(a => new {a.year, a.month, a.address})
            .Where(a => a.year == timeOneYear && a.month == timeOneMonth);
            // .Select(a => 
            //     new CremationNumVM {
            //         TimeOneNumber = SqlFunc.AggregateCount(1),
            //         Address = a.address
            //     }).ToList();
        var tQueryable2 = Db.Queryable<Ten_Sample_Ser_Cremation, Ten_Sample_Ser_Main>
            ((c, m) =>
                new JoinQueryInfos(JoinType.Inner, m.ServiceNo.Equals(c.ServiceNo)))
          
            .Where((c, m) => c.Status != 0)
            .Select((c, m) => new CremationT{
                year = c.StartDt.Value.Year,
                month = c.StartDt.Value.Month,
                address = m.Address
            })
            .MergeTable()
            .GroupBy(a => new {a.year, a.month, a.address})
            .Where(a => a.year == timeTwoYear && a.month == timeTwoMonth);
            // .Select(a => 
            //     new CremationNumVM {
            //         TimeOneNumber = SqlFunc.AggregateCount(1),
            //         Address = a.address
            //     }).ToList();
            List<CremationNumVM>  cremationNumVms = 
                Db.Queryable(tQueryable1,tQueryable2,
                (t1,t2)=>t1.address.Equals(t2.address)).Select(
                (t1,t2)=>new CremationNumVM{
                    TimeOneNumber = SqlFunc.AggregateCount(t1.address),
                    TimeTwoNumber = SqlFunc.AggregateCount(t2.address),
                    Address = t1.address
                }).ToList();
                return cremationNumVms ;
                }


    0 回复
  • @九黎:最新的还报错吗,什么错

    0 回复
  • 现在没问题了 升级后发现项目有很多地方用不了了 我退回去又不报错了

    @小杰

    0 回复

学习文档