Вы должны четко объяснить, что вы хотите с самого начала.
CREATE TABLE #temp
(
[FixedDepDate] DATETIME
);
INSERT INTO #temp
(
[FixedDepDate]
)
VALUES
('2018-03-07 00:00:00.000'),
('2018-08-23 00:00:00.000'),
('2018-08-29 00:00:00.000'),
('2018-07-04 00:00:00.000'),
('2018-07-10 00:00:00.000'),
('2018-07-25 00:00:00.000');
WITH source AS
(
SELECT
YEAR(FixedDepDate) AS y,
MONTH(FixedDepDate) AS m,
DATENAME(MONTH, FixedDepDate) + ' - ' +
DATENAME(YEAR, FixedDepDate) AS YearMonth,
ROW_NUMBER() OVER (
PARTITION BY YEAR(FixedDepDate) * 10000 +
MONTH(FixedDepDate)
ORDER BY DAY(FixedDepDate)) AS nDay,
RIGHT('0' + LTRIM(STR(DAY(FixedDepDate))), 2) AS cDay
FROM #temp
)
SELECT YearMonth, [1], [2], [3]
FROM source
PIVOT ( max(cDay)
FOR [nDay] IN ( [1], [2], [3] )
) pvt
ORDER BY y,m;
DROP TABLE #temp;
EDIT:
void Main()
{
DataTable tbl = new DataTable();
using (SqlConnection con = new SqlConnection(@"server=.\SQLExpress2012;Database=Test;Trusted_connection=yes"))
{
con.Open();
var columns = Convert.ToInt32(new SqlCommand(@"SELECT MAX(cnt)
FROM
(
SELECT COUNT(*) AS cnt
FROM MyDates
GROUP BY YEAR(FixedDepDate),
MONTH(FixedDepDate)
) tmp;", con)
.ExecuteScalar());
var collist = string.Join(",", Enumerable.Range(1, columns).Select(e => $"[{e}]"));
var pivot = $@"WITH source AS
(
SELECT
YEAR(FixedDepDate) AS y,
MONTH(FixedDepDate) AS m,
DATENAME(MONTH, FixedDepDate) + ' - ' +
DATENAME(YEAR, FixedDepDate) AS YearMonth,
ROW_NUMBER() OVER (
PARTITION BY YEAR(FixedDepDate) * 10000 +
MONTH(FixedDepDate)
ORDER BY DAY(FixedDepDate)) AS nDay,
RIGHT('0' + LTRIM(STR(DAY(FixedDepDate))), 2) AS cDay
FROM Mydates
)
SELECT YearMonth, {collist}
FROM source
PIVOT ( max(cDay)
FOR [nDay] IN ( {collist} )
) pvt
ORDER BY y,m;
";
tbl.Load( new SqlCommand(pivot,con).ExecuteReader());
con.Close();
}
var f = new Form();
var dgv = new DataGridView {Dock=DockStyle.Fill, DataSource=tbl};
f.Controls.Add(dgv);
f.Show();
}