protected override void AppendTo(SqlStringBuilder builder)
        {
            builder.Append("SELECT ");
            if (Distinct)
            {
                builder.Append("DISTINCT ");
            }

            for (int i = 0; i < Items.Count; i++)
            {
                Items[i].AppendTo(builder);

                if (i < Items.Count - 1)
                {
                    builder.Append(", ");
                }
            }

            if (!From.IsEmpty)
            {
                builder.AppendLine();
                builder.Indent();
                From.AppendTo(builder);

                if (Where != null)
                {
                    builder.AppendLine();
                    builder.Append("WHERE ");
                    Where.AppendTo(builder);
                }
                else if (Having != null)
                {
                    builder.AppendLine();
                    builder.Append("HAVING ");
                    Having.AppendTo(builder);
                }
            }

            // TODO: continue
        }