How do I make table cells that span more than one column or row?

I tried this code but the border lines are not deleted:

\begin{tabular}{|p{0.6in}|p{0.3in}|p{0.9in}|p{0.9in}|p{0.8in}|} \hline
&                                                   &  & $P_{mot}$ &  \\ \hline
$P_{batt}$ &  & S & M & H \\ \hline
& S & S & Z & VS \\ \hline
SOC & M & M & Z & H \\ \hline
& H & M & Z & H \\ \hline
\end{tabular}


How do I delete the border of cells?

• Why not use a different (better) representation? Something that uses booktabs. Something like this? – Werner Nov 20 '18 at 6:17
• You might have a use for tablesgenerator.com to generate your latex tables, I often use this tool. – Maxim Nov 20 '18 at 9:19
• Welcome to TeX.SX! Please make your code compilable (if possible), or at least complete it with \documentclass{...}, the required \usepackage's, \begin{document}, and \end{document}. That may seem tedious to you, but think of the extra work it represents for TeX.SX users willing to give you a hand. Help them help you: remove that one hurdle between you and a solution to your problem. – Martin Schröder Nov 20 '18 at 12:34
• Okay i will consider those methods – sreeramp96 Dec 1 '18 at 1:12

Welcome to TeX.SE! In order to merge rows or columns, you need to use \multirow (which requires the multirow package) or \multicolumn, respectively. And if you nest them, you need to do it in the right order.

\documentclass{article}
\usepackage{multirow}
\begin{document}
\begin{tabular}{|p{0.6in}|p{0.3in}|p{0.9in}|p{0.9in}|p{0.8in}|} \hline
\multicolumn{2}{|c|}{\multirow{2}{*}{$P_\mathrm{batt}$}} &
\multicolumn{3}{|c|}{$P_\mathrm{mot}$ }  \\ \cline{3-5}
\multicolumn{2}{|c|}{}   & S & M & H \\ \cline{1-5}
\multirow{3}{*}{SOC} & S & S & Z & VS \\ \cline{2-5}
& M & M & Z & H \\ \cline{2-5}
& H & M & Z & H \\ \hline
\end{tabular}
\end{document}


• The initial | in \multicolumn{3}{|c|}{$P_\mathrm{mot}$ } should be deleted, otherwise it is printed twice. – CarLaTeX Nov 20 '18 at 6:47
• Yeah am not aware of all the methods. Thanks for the solution. – sreeramp96 Nov 20 '18 at 7:29

With \multirow and \multicolumn you can reach what you need.

I have also created a new column type for centering the cell contents and redefined \arraystretch to have more vertical space between rows.

However, I would suggest you to get rid of the vertical rules and use booktabs.

\documentclass{article}
\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\renewcommand{\arraystretch}{1.3}
\usepackage{multirow}

\usepackage{booktabs}
\begin{document}

\begin{tabular}{|p{0.6in}|C{0.3in}|C{0.4in}|C{0.4in}|C{0.4in}|} \hline
\multicolumn{2}{|c|}{\multirow{2}{*}{$P_{batt}$}}& \multicolumn{3}{c|}{$P_{mot}$}   \\ \cline{3-5}
\multicolumn{2}{|c|}{}  & S & M & H \\ \hline
& S & S & Z & VS \\ \cline{2-5}
SOC & M & M & Z & H \\ \cline{2-5}
& H & M & Z & H \\ \hline
\end{tabular}

\vspace{10pt}My suggestion:\vspace{10pt}

\begin{tabular}{lc*{3}{C{1.5em}}}
\toprule
\multicolumn{2}{c}{\multirow{2}{*}{$P_{batt}$}}& \multicolumn{3}{c}{$P_{mot}$}   \\ \cmidrule{3-5}
\multicolumn{2}{c}{}  & S & M & H \\ \midrule
& S & S & Z & VS \\ \cmidrule(l){2-5}
SOC & M & M & Z & H \\ \cmidrule(l){2-5}
& H & M & Z & H \\
\bottomrule
\end{tabular}
\end{document}


• Am a beginner in latex, that's why. I don;t know about this booktabs. Anyway thanks for the suggestion, I will look through it. – sreeramp96 Nov 20 '18 at 7:27

Whatever applies to each item in a column should go in the column header. Here's my proposal:

\documentclass[twocolumn]{article}
\usepackage{array,booktabs}

\usepackage{lipsum} % for context

\begin{document}

\lipsum[2]

\begin{table}[htp]
\centering

\begin{tabular}{ @{} *{4}{w{c}{3em}} @{} }
\toprule
$P_{\mathrm{batt}}$ & \multicolumn{3}{c}{$P_{\mathrm{mot}}$} \\
\cmidrule(r){1-1} \cmidrule(l){2-4}
SOC & S & M & H \\
\midrule
S & S & Z & VS \\
M & M & Z & H \\
H & M & Z & H \\
\bottomrule
\end{tabular}

\caption{Rule based of fuzzy logic control}

\end{table}

\lipsum

\end{document}