public void GroupByRollupGrouping([IncludeDataSources(true,
                                                              TestProvName.AllSqlServer2008Plus,
                                                              TestProvName.AllPostgreSQL95Plus,
                                                              TestProvName.AllOracle,
                                                              TestProvName.AllSapHana)] string context)
        {
            var testData = GroupSampleClass.TestData();

            using (var db = GetDataContext(context))
                using (var table = db.CreateLocalTable(testData))
                {
                    var query = table.Distinct();

                    var grouped = from q in query
                                  group q by Sql.GroupBy.Rollup(() => new { q.Id1, q.Id2 })
                                  into g
                                  select new
                    {
                        IsGrouping = Sql.Grouping(g.Key.Id1) == 1,
                        g.Key.Id1,
                        Count = g.Count()
                    };

                    var result = grouped.ToArray();
                }
        }
        public void GroupByGroupingSetsHaving2([IncludeDataSources(true,
                                                                   TestProvName.AllSqlServer2008Plus,
                                                                   TestProvName.AllPostgreSQL95Plus,
                                                                   TestProvName.AllOracle,
                                                                   TestProvName.AllSapHana)] string context)
        {
            var testData = GroupSampleClass.TestData();

            using (var db = GetDataContext(context))
                using (var table = db.CreateLocalTable(testData))
                {
                    var query = table.Distinct();

                    var grouped = (from q in query
                                   group q by Sql.GroupBy.GroupingSets(() => new
                                                                       { Set1 = new { q.Id1, q.Id2 }, Set2 = new { q.Id2 }, Set3 = new { } })
                                   into g
                                   select g)
                                  .Where(gg => gg.Count() > 0)
                                  .Select(g =>
                                          new
                    {
                        g.Key.Set1.Id1,
                        Count = g.Count()
                    });

                    var result = grouped.ToArray();
                }
        }